拆分以大写开头的任何单词和结尾的每个数字

时间:2017-05-07 18:52:18

标签: java regex pattern-matching

如何使用regex f.ex。分割(在java中)每个单词(用大写字母分隔)和字符串末尾的数字:

  1. HouseCat22
  2. wolf1
  3. thisIsTheEnd15
  4. For 1)我需要一个包含3个元素的数组:

    House
    Cat
    22
    

    对于2)我需要一个包含2个元素的数组:

    Wolf
    1
    

    对于3)它应该分为5个元素:

    this
    Is
    The
    End
    15
    

    我已经尝试了几个小时而没有成功......但我根本没有得到。 以下分为单词:
    (?<=[a-z])(?=[A-Z])
    但我不知道如何在行尾分割数字。

    我真的很感激一些帮助。 非常感谢! 迪迪埃

1 个答案:

答案 0 :(得分:0)

您可以将数字匹配模式添加到正向前瞻:

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

请参阅regex demo。但是,此解决方案不会在大写字母和数字之间拆分(因此,EndD15将在EndD15中拆分。

您可以考虑匹配方法(它会更有效和可读),您可以使用

[a-zA-Z][a-z]*|[0-9]+

请参阅this demo

这将匹配:

  • [a-zA-Z][a-z]* - 任何ASCII字母,然后是任何0+小写ASCII字母
  • | - 或
  • [0-9]+ - 1+位。

随着需求的发展,可以进一步调整。示例Java code

String s = "thisIsTheEnd15";
Matcher m = Pattern.compile("[a-zA-Z][a-z]*|[0-9]+").matcher(s);
List<String> res = new ArrayList<>();
while (m.find()) {
    res.add(m.group(0));
}
System.out.println(res);
// => [this, Is, The, End, 15]