我找到了一个出色的RegEx来提取camelCase或TitleCase表达的一部分。
(?<!^)(?=[A-Z])
它按预期工作:
例如,使用Java:
String s = "loremIpsum"; words = s.split("(?<!^)(?=[A-Z])"); //words equals words = new String[]{"lorem","Ipsum"}
我的问题是在某些情况下它不起作用:
在我看来,结果应该是:
换句话说,给定n个大写字符:
以下正则表达式适用于所有上述示例:
public static void main(String[] args) { for (String w : "camelValue".split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])")) { System.out.println(w); } }
它的作用是强制后面的否定后缀不仅忽略字符串开头的匹配项,而且还忽略在大写字母后跟另一个大写字母的匹配项。这样可以处理“ VALUE”之类的情况。
正则表达式的第一部分本身由于无法在“ RPC”和“ Ext”之间分割而在“ eclipseRCPExt”上失败。这是第二个条款的目的:(?<!^)(?=[A-Z][a-z]。此子句允许在每个大写字母前跟一个小写字母前进行拆分,但字符串的开头除外。
(?<!^)(?=[A-Z][a-z]