【问题标题】:Split camel case string with number special treatment [closed]带有数字特殊处理的拆分驼峰字符串[关闭]
【发布时间】:2018-06-17 19:15:16
【问题描述】:

我需要对数字进行特殊处理来拆分驼峰式字符串(在 Java 中)。我尝试了一些正则表达式但没有成功。以下示例:

SomeString -> ["Some", "String"]
SomeString1 -> ["Some", "String1"]
SomeString1Word -> ["Some", "String1Word"]

任何想法我应该使用什么正则表达式?

编辑:规则:按驼峰式拆分,但在数字介于大小写字母之间时不拆分。当数字是最后一个字符时也不要拆分。这将符合我的要求。

【问题讨论】:

  • 这里的一般拆分规则是什么?你没有说出来。
  • 字符串总是字母数字的吗?
  • 所以只拆分[lower][upper] 模式?我认为这篇文章可能会以正确的方式指导您stackoverflow.com/questions/50890664/…
  • @user1055395 是的,字符串总是字母数字的

标签: java regex split


【解决方案1】:

看起来您想在 之前拆分任何前面有小写字母的大写字母,即 小写字母和大写字母之间,所以:

使用正则表达式拆分:     (?<=[a-z])(?=[A-Z])
或使用 POSIX 字符类:  (?<=\p{Lower})(?=\p{Upper})
或者使用 java.lang.Character 类:(?<=\p{javaLowerCase})(?=\p{javaUpperCase})
或使用 Unicode 类别类:(?<=\p{Ll})(?=\p{Lu})

(?<=X) 是一个零宽度的正向lookbehind。
(?=X) 是一个零宽度的正向lookahead。

演示

public static void main(String[] args) {
    test("SomeString");
    test("SomeString1");
    test("SomeString1Word");
}
private static void test(String text) {
    String regex = "(?<=\\p{Ll})(?=\\p{Lu})";
    System.out.printf("%s -> %s%n", text, Arrays.toString(text.split(regex)));
}

输出

SomeString -> [Some, String]
SomeString1 -> [Some, String1]
SomeString1Word -> [Some, String1Word]

【讨论】:

    【解决方案2】:
    str.split("(?<![0-9])(?=[A-Z])")
    

    【讨论】:

      【解决方案3】:

      幸运的是,我想我已经找到了您正在寻找的模式:

      (?<=[a-z])(?=[A-Z])
      

      测试:

      "SomeString".split("(?<=[a-z])(?=[A-Z])")      // [Some, String]
      "SomeString1".split("(?<=[a-z])(?=[A-Z])")     // [Some, String1]
      "SomeString1Word".split("(?<=[a-z])(?=[A-Z])") // [Some, String1Word]
      

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 2021-10-21
        • 2019-07-12
        • 2016-03-03
        • 1970-01-01
        • 2022-11-13
        • 2020-04-25
        • 1970-01-01
        相关资源
        最近更新 更多