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

标签 java regex camelcasing title-case

我找到了 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/

相关文章:

java - 从星期几整数java获取日期字符串

javascript - 使用给定的搜索词改进 RegEx 以突出显示页面上的文本

regex - 如何阅读此命令以删除行末的所有空格

emacs - 在Emacs中从驼峰格式转换为_

java - WebElement#getScreenShotAs(OutputType.File)不工作

java - 在 Maven 插件中访问注解

java - 终止一个对象与使它无效一样吗?

javascript - 无法在 javascript 正则表达式中匹配 '£'(英镑)

regex - 如何使用正则表达式将下划线转换为驼峰式大小写?

regex - utf8 在 perl 中为 CamelCase (WikiWord) 正确的正则表达式