1

假设我有如下字符串:

OneTwo
ThreeFour
AnotherString
DVDPlayer
CDPlayer

除了“DVDPlayer”和“CDPlayer”之外,我知道如何标记驼峰式的。我知道我可以手动标记它们,但也许你可以给我看一个可以处理所有情况的正则表达式?

编辑:预期的令牌是:

OneTwo -> One Two
...
CDPlayer -> CD Player
DVDPlayer -> DVD Player
4

5 回答 5

4

看看我对这个问题的回答,.NET - 如何将“大写”分隔的字符串拆分为数组?.

正则表达式如下所示:

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

可以稍微修改它以允许搜索驼峰式标记,方法是将 替换$\b

/([A-Z]+(?=\b|[A-Z][a-z])|[A-Z]?[a-z]+)/g
于 2009-09-07T12:12:33.767 回答
4

试试这个正则表达式:

[A-Z](?:[a-z]+|[A-Z]*?(?=[A-Z][a-z]|\b))
于 2009-09-07T12:14:21.690 回答
1

这是我的尝试:

([A-Z][a-z]+)|([A-Z]+(?=[A-Z][a-z]+))
于 2009-09-07T12:20:22.557 回答
1

正则表达式

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

假设您的所有字符串都是 2 个单词长并且第二个单词不像 DVD,那么您会做您想做的事情。

即它适用于您的示例,但可能不适用于您实际尝试做的事情。

于 2009-09-07T12:15:36.577 回答
0

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

于 2009-09-07T12:05:41.893 回答