如何使用正则表达式对此进行标记?

时间:2009-09-07 12:02:18

标签: python ruby regex tokenize lexical-analysis

假设我有以下字符串:

OneTwo
ThreeFour
AnotherString
DVDPlayer
CDPlayer

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

编辑: 预期的代币是:

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

5 个答案:

答案 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)

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