我正在尝试将camelcase字符串拆分为单个单词,同时保留大写字母串。例如,“fooBarABABFooBar”应该变成“foo bar ABAB foo bar”。有一些要求。像“ABAB”这样的缩写应保持大写,但其他单词的第一个字母应为小写。我有一些运气使用以下正则表达式分解骆驼案例:
def str = "fooBarABABFooBar"
println str.replaceAll(/(?<=[a-z])(?=[A-Z])/) { ' ' + it }
这让我觉得“foo Bar ABABFoo Bar”。我已经能够从这个到“foo Bar A B A B Foo Bar”,但没有达到预期的输出。有任何想法吗?谢谢!
答案 0 :(得分: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
^ ^ ^ ^