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

4

我有以下字符串46MTS007,需要将数字和字母分离,最终得到一个如下的数组:{"46", "MTS", "007"}

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

但是spl仍然为空,正则表达式有什么问题吗?我已经在regex101上测试过了,并且它像预期的那样工作(使用全局标志)

2个回答

1
如果您想使用split函数,可以使用基于查找的正则表达式:
(?<=\d)(?=\D)|(?<=\D)(?=\d)

RegEx演示

这意味着在下一位是数字且前一位不是数字的位置上分割,或者在位置为非数字且前一位是数字的位置上分割。

在Java中:

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

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(),否则它将无法移动到下一个组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接