gpt4 book ai didi

java - RegEx 拆分 camelCase 或 TitleCase(高级)

转载 作者:IT老高 更新时间:2023-10-28 11:50:01 33 4
gpt4 key购买 nike

我找到了 brilliant RegEx提取 camelCase 或 TitleCase 表达式的一部分。

 (?<!^)(?=[A-Z])

它按预期工作:

  • 值(value) -> 值(value)
  • camelValue -> Camel /值(value)
  • TitleValue -> 标题/值

以 Java 为例:

String s = "loremIpsum";
words = s.split("(?<!^)(?=[A-Z])");
//words equals words = new String[]{"lorem","Ipsum"}

我的问题是它在某些情况下不起作用:

  • 案例 1:值 -> 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 个字符)。

关于如何改进这个正则表达式的任何想法?

最佳答案

以下正则表达式适用于上述所有示例:

public static void main(String[] args)
{
for (String w : "camelValue".split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])")) {
System.out.println(w);
}
}

它的工作原理是强制否定的lookbehind不仅忽略字符串开头的匹配项,而且还忽略一个大写字母前面有另一个大写字母的匹配项。这可以处理“VALUE”之类的情况。

由于无法在“RPC”和“Ext”之间拆分,正则表达式的第一部分在“eclipseRCPExt”上失败。这是第二个子句的目的:(?<!^)(?=[A-Z][a-z] .此子句允许在每个大写字母前拆分,后跟一个小写字母,字符串开头除外。

关于java - RegEx 拆分 camelCase 或 TitleCase(高级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7593969/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com