假设我有以下字符串:
OneTwo
ThreeFour
AnotherString
DVDPlayer
CDPlayer
除了“DVDPlayer”和“CDPlayer”之外,我知道如何对驼峰式游戏进行标记。我知道我可以手动标记它们,但也许你可以告诉我一个可以处理所有情况的正则表达式?
编辑: 预期的代币是:
OneTwo -> One Two
...
CDPlayer -> CD Player
DVDPlayer -> DVD Player
答案 0 :(得分: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
答案 1 :(得分:4)
试试这个正则表达式:
[A-Z](?:[a-z]+|[A-Z]*?(?=[A-Z][a-z]|\b))
答案 2 :(得分:1)
正则表达式
([A-Z]+[a-z]*)([A-Z][a-z]*)
假设你的所有字符串都长2个字而第二个字不像DVD,那么会做你想要的。
即。它可以用于您的示例,但可能不适用于您实际尝试的内容。
答案 3 :(得分:1)
这是我的尝试:
([A-Z][a-z]+)|([A-Z]+(?=[A-Z][a-z]+))
答案 4 :(得分:0)
尝试非贪婪的向前看。令牌将是一个或多个大写字符,后跟零个或多个小写字符。当下两个字符是大写和小写时,令牌将终止 - 匹配此部分是可以使用非贪婪匹配的内容。这种方法有局限性,但它适用于您提供的示例。