1

我正在尝试将驼峰式字符串拆分为单个单词,同时将大写字母字符串保持在一起。例如,“fooBarABABFooBar”应该变成“foo bar ABAB foo bar”。有几个要求。像“ABAB”这样的缩写应该保持大写,但其他单词的第一个字母应该小写。我有一些运气使用以下正则表达式分解骆驼案例:

def str = "fooBarABABFooBar"
println str.replaceAll(/(?<=[a-z])(?=[A-Z])/) { ' ' + it }

这让我得到“foo Bar ABABFoo Bar”。我已经能够从这个转到“foo Bar ABAB Foo Bar”,但不能达到所需的输出。有任何想法吗?谢谢!

4

1 回答 1

1

试试下面的表达式:

(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])

如您所见,我使用了您的原始想法并对其进行了一些修改。我注意到在您的表达中,(?<=[a-z])(?=[A-Z])您尝试匹配有一个小写字母后跟一个大写字母的位置,好的,干得好。

现在我对这个想法更进一步,并注意到还有其他重要的位置,即(?=[A-Z][a-z])或换句话说:匹配有大写后跟小写的位置,例如Foo因为这可能是驼峰式的情况。

我的表达符合以下位置:

foo BarABAB Foo Bar
   ^       ^   ^

请注意,还剩下一个位置,现在轮到您的表达式,它计算以下位置:

foo Bar ABAB Foo Bar
       ^

所以当我的表达失败时,你的成功,反之亦然。所以现在他们两个一起匹配:

foo Bar ABAB Foo Bar
   ^   ^    ^   ^
于 2013-09-12T16:11:21.143 回答