RegEx拆分camelCase或TitleCase(高级)
我找到了一个出色的RegEx来提取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:日食/ RCP /外部
换句话说,给定n个大写字符:
- 如果n个字符后跟小写字符,则组应为:(n-1个字符)/(第n个字符+小写字符)
- 如果n个字符位于末尾,则该组应为:(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]
。此子句允许在每个大写字母前跟一个小写字母前进行拆分,但字符串的开头除外。
以上是 RegEx拆分camelCase或TitleCase(高级) 的全部内容, 来源链接: utcz.com/qa/408058.html