用正则表达式分割JAVA不起作用

时间:2016-04-01 19:25:10

标签: java regex string split

我有以下字符串{"46", "MTS", "007"},我必须从字母中拆分数字,所以在结果中我应该得到像String s = "46MTS007"; String[] spl = s.split("\\d+|\\D+");

这样的数组
spl

但是{{1}}仍然是空的,正则表达式有什么问题?我已经在regex101中进行了测试,它的工作方式与预期一致(带有全局标记)

2 个答案:

答案 0 :(得分:1)

如果要使用拆分,可以使用此基于外观的正则表达式:

(?<=\d)(?=\D)|(?<=\D)(?=\d)

RegEx Demo

这意味着分割下一个位置为数字且前一个为非数字的位置或位置为非数字且前一个位置为数字的位置。

在Java中:

String s = "46MTS007";
String[] spl = s.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");

答案 1 :(得分:0)

正在使用的正则表达式不会拆分字符串。 Split()使用您提供的正则表达式拆分字符串,但此处使用的正则表达式与整个字符串匹配而不是分隔符。您可以使用Pattern Matcher在字符串中查找不同的组。

public static void main(String[] args) {
    String line = "46MTS007";
    String regex = "\\D+|\\d+";
    Pattern pattern = Pattern.compile(regex);
    Matcher m  = pattern.matcher(line);    
    while(m.find())
        System.out.println(m.group());
}

输出:

46
MTS
007

注意:在捕获每个组之后不要忘记使用m.find(),否则它不会移动到下一个组。