我有以下字符串46MTS007
,需要将数字和字母分离,最终得到一个如下的数组:{"46", "MTS", "007"}
String s = "46MTS007";
String[] spl = s.split("\\d+|\\D+");
但是spl
仍然为空,正则表达式有什么问题吗?我已经在regex101上测试过了,并且它像预期的那样工作(使用全局标志)
(?<=\d)(?=\D)|(?<=\D)(?=\d)
这意味着在下一位是数字且前一位不是数字的位置上分割,或者在位置为非数字且前一位是数字的位置上分割。
在Java中:
String s = "46MTS007";
String[] spl = s.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
你正在使用的正则表达式无法分割字符串。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