我找到了一个很棒的正则表达式,可以提取出camelCase或TitleCase表达式中的部分。
(?<!^)(?=[A-Z])
它按预期工作:
- value -> value
- camelValue -> camel / Value
- TitleValue -> Title / Value
例如在Java中:
String s = "loremIpsum";
words = s.split("(?<!^)(?=[A-Z])");
//words equals words = new String[]{"lorem","Ipsum"}
我的问题是有些情况下它不起作用:
- 情况1:VALUE -> V / A / L / U / E
- 情况2:eclipseRCPExt -> eclipse / R / C / P / Ext
在我看来,结果应该是:
- 情况1:VALUE
- 情况2:eclipse/RCP/Ext
换句话说,给定n个大写字符:
- 如果这n个字符后面跟着小写字符,则分组应该为:(n-1个字符)/(第n个字符+小写字符)
- 如果这n个字符位于末尾,则分组应该为:(n个字符)。
如何改进这个正则表达式呢?