拆分骆驼箱绳带号码特殊处理

时间:2018-06-17 19:15:16

标签: java regex split

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

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

我应该使用什么样的正则表达式?

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

3 个答案:

答案 0 :(得分:3)

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

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

(?<=X)是一个零宽度的正面观察 (?=X)是一个零宽度的正向前瞻。

演示

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]

答案 1 :(得分:1)

str.split("(?<![0-9])(?=[A-Z])")

答案 2 :(得分:1)

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

(?<=[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]