假设我有一个字符串,如下列:我怎样才能用正则表达式来标记这个?
OneTwo
ThreeFour
AnotherString
DVDPlayer
CDPlayer
我知道如何来标记驼峰的,除“DVD播放机”和“CD播放器”。我知道我可以手动记号化它们,但也许你能告诉我一个正则表达式,可以处理所有的情况?
编辑: 预期令牌是:
OneTwo -> One Two
...
CDPlayer -> CD Player
DVDPlayer -> DVD Player
假设我有一个字符串,如下列:我怎样才能用正则表达式来标记这个?
OneTwo
ThreeFour
AnotherString
DVDPlayer
CDPlayer
我知道如何来标记驼峰的,除“DVD播放机”和“CD播放器”。我知道我可以手动记号化它们,但也许你能告诉我一个正则表达式,可以处理所有的情况?
编辑: 预期令牌是:
OneTwo -> One Two
...
CDPlayer -> CD Player
DVDPlayer -> DVD Player
看我对这个问题,.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
后者几乎等同于Gumbo的答案。唯一的区别是,这也接受以小写开头的单词。 “camelCase” - > [“camel”,“Case”] – 2009-09-07 12:21:45
尝试提前一非贪婪的样子。令牌可以是一个或多个大写字符,后跟零个或多个小写字符。在接下来的两个字符是一个大写和小写的令牌将终止 - 匹配这部分是可以使用什么非贪婪匹配。这种方法有局限性,但它应该适用于您提供的示例。
+1,因为你先到那里 - 尽管我猜想一个例子可能会把你推到“有帮助”的排名:) – 2009-09-07 14:17:51
试试这个正则表达式:
[A-Z](?:[a-z]+|[A-Z]*?(?=[A-Z][a-z]|\b))
正则表达式
([A-Z]+[a-z]*)([A-Z][a-z]*)
会做你想要的,假设你所有的字符串都是2个字长,第二个字不像DVD。
I.e.它会适用于你的例子,但也许不适合你实际想要做的事情。
这里是我的尝试:
([A-Z][a-z]+)|([A-Z]+(?=[A-Z][a-z]+))
那你在这种情况下会发生什么记号? – Gumbo 2009-09-07 12:05:31
一,二;三四;另外,字符串; DVD播放机; CD,播放器 – Joey 2009-09-07 12:07:10