[英]JAVA split with regex doesn't work
我有以下字符串46MTS007
,我必须从字母中拆分数字,因此结果我应该得到一个数组,如{"46", "MTS", "007"}
String s = "46MTS007";
String[] spl = s.split("\\d+|\\D+");
但是spl
仍然是空的,正则表达式有什么问题? 我已经在 regex101 中进行了测试,它按预期工作(带有全局标志)
如果你想使用 split 你可以使用这个基于环视的正则表达式:
(?<=\d)(?=\D)|(?<=\D)(?=\d)
这意味着拆分下一个位置是数字和前一个位置是非数字的位置,或者当位置是非数字并且前一个位置是一个数字时。
在 Java 中:
String s = "46MTS007";
String[] spl = s.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
您使用的正则表达式不会拆分字符串。 Split() 使用您提供的正则表达式拆分字符串,但此处使用的正则表达式匹配整个字符串而不是分隔符。 您可以使用模式匹配器在字符串中查找不同的组。
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() 否则它不会移动到下一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.