需要帮助使用正则表达式在java中拆分字符串

时间:2011-05-25 06:25:39

标签: java regex

我有一个像"portal100common2055"这样的字符串。

我想把它分成两部分,第二部分应该只包含数字。

"portal200511sbet104"将变为"portal200511sbet""104"

你能帮助我实现这个目标吗?

2 个答案:

答案 0 :(得分:5)

像这样:

    Matcher m = Pattern.compile("^(.*?)(\\d+)$").matcher(args[0]);
    if( m.find() ) {
        String prefix = m.group(1);
        String digits = m.group(2);
        System.out.println("Prefix is \""+prefix+"\"");
        System.out.println("Trailing digits are \""+digits+"\"");
    } else {
        System.out.println("Does not match");
    }

答案 1 :(得分:3)

String[] parts = input.split("(?<=\\D)(?=\\d+$)");
if (parts.length < 2) throw new IllegalArgumentException("Input does not end with numbers: " + input);
String head = parts[0];
String numericTail = parts[1];

这个更优雅的解决方案使用后面的展望正则表达式的功能。

说明:

  • (?<=\\D)表示当前点,确保前面的字符以非数字结尾(非数字表示为\D
  • (?=\\d+$)表示当前点,确保只在输入末尾找到数字(数字表示为\d

这只会在想要分割输入

的所需点处为真