2009-09-07 191 views
1

假设我有一个字符串,如下列:我怎样才能用正则表达式来标记这个?

OneTwo 
ThreeFour 
AnotherString 
DVDPlayer 
CDPlayer 

我知道如何来标记驼峰的,除“DVD播放机”和“CD播放器”。我知道我可以手动记号化它们,但也许你能告诉我一个正则表达式,可以处理所有的情况?

编辑: 预期令牌是:

OneTwo -> One Two 
... 
CDPlayer -> CD Player 
DVDPlayer -> DVD Player 
+1

那你在这种情况下会发生什么记号? – Gumbo 2009-09-07 12:05:31

+1

一,二;三四;另外,字符串; DVD播放机; CD,播放器 – Joey 2009-09-07 12:07:10

回答

4

看我对这个问题,.NET - How can you split a “caps” delimited string into an array?答案。

正则表达式如下:

/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g 

它可以通过更换被稍微修改,以便寻找骆驼套管令牌时,$\b

/([A-Z]+(?=\b|[A-Z][a-z])|[A-Z]?[a-z]+)/g 
+0

后者几乎等同于Gumbo的答案。唯一的区别是,这也接受以小写开头的单词。 “camelCase” - > [“camel”,“Case”] – 2009-09-07 12:21:45

0

尝试提前一非贪婪的样子。令牌可以是一个或多个大写字符,后跟零个或多个小写字符。在接下来的两个字符是一个大写和小写的令牌将终止 - 匹配这部分是可以使用什么非贪婪匹配。这种方法有局限性,但它应该适用于您提供的示例。

+0

+1,因为你先到那里 - 尽管我猜想一个例子可能会把你推到“有帮助”的排名:) – 2009-09-07 14:17:51

4

试试这个正则表达式:

[A-Z](?:[a-z]+|[A-Z]*?(?=[A-Z][a-z]|\b)) 
1

正则表达式

([A-Z]+[a-z]*)([A-Z][a-z]*) 

会做你想要的,假设你所有的字符串都是2个字长,第二个字不像DVD。

I.e.它会适用于你的例子,但也许不适合你实际想要做的事情。

1

这里是我的尝试:

([A-Z][a-z]+)|([A-Z]+(?=[A-Z][a-z]+)) 
相关问题