当前位置: 首页 > 面试题库 >

RegEx拆分camelCase或TitleCase(高级)

袁开宇
2023-03-14
问题内容

我找到了一个出色的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]。此子句允许在每个大写字母前跟一个小写字母前进行拆分,但字符串的开头除外。



 类似资料:
  • 这是作为输入的字符串,但我只需要每一列,从第二列开始,即: 1(第二行) 2和1(第三行) 1(第五排) 这个在可能有多少行或多少列(列被一个空格分割)方面没有固定的大小。 我认为通过使用以下工具,这相当容易: 我需要第一列之后的每一列。我仍在学习regex,但似乎找不到一个好的解决方案。我知道关于拆分的“\\r?\\n”和“”,但不知道如何将两者连接起来以获取每一列。非常感谢您的帮助:) 另一个

  • 问题内容: 我将如何拆分单词: 放入数组,这样我就可以得到: 与? 我很累,但这只是整个词 问题答案: 您还可以用作: 说明:

  • 问题内容: 我想要达到的目标是这样的: 所以我搜索并找到了这个完美的正则表达式: 作为下一个逻辑步骤,我尝试了: 为什么这不起作用,如何从python中的链接问题中获得结果? 编辑:解决方案摘要 我用一些测试用例测试了所有提供的解决方案: 总而言之,您可以说@kalefranz的解决方案与问题不符(请参阅最后一种情况),而@casimir et hippolyte的解决方案占用了一个空格,因此违反

  • 问题:我可以在给定的正则表达式上拆分字符串,但相同的正则表达式在匹配具有相同正则表达式的方法时失败。 问题:如何使用用于拆分同一字符串的同一正则表达式在matches方法上返回true? 查看操作中的正则表达式

  • 我需要查找、查找/替换或转换字符串中的pilcrow/偏微分字符,因为它们目前显示为。 我以为会起作用但没有:

  • 我有一个来自Kafka数据流,它对MyModel中的一个字段有2个可能的值。MyModel是一个pojo,具有从Kafka的消息解析的特定于领域的字段。