如果我有一个像“11E12C108N”这样的字符串,它是一个字母组和数字组的串联,我如何在没有分隔符空格字符的情况下分割它们?
例如,我希望得到的拆分为:
tokens[0] = "11"
tokens[1] = "E"
tokens[2] = "12"
tokens[3] = "C"
tokens[4] = "108"
tokens[5] = "N"
我现在就有这个
public static void main(String[] args) {
String stringToSplit = "11E12C108N";
Pattern pattern = Pattern.compile("\\d+\\D+");
Matcher matcher = pattern.matcher(stringToSplit);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
这给了我:
11E
12C
108N
我可以让原来的正则表达式一次完成一个完整的拆分吗?而不是必须在中间标记上再次运行正则表达式?
2条答案
按热度按时间tv6aics11#
使用下面的正则表达式,并获得所有匹配项的列表。这将是你正在寻找的。
在Java中,我认为代码看起来像这样:
v8wbuo2f2#
你也可以在正则表达式中使用“look around”机制来描述你想在哪里
split
你的测试:输出:
[11, E, 12, C, 108, N]
我们的想法是在数字(
\d
)和非数字(\D
)之间的位置进行分割。换句话说,它是place(空字符串),它具有:(?<=\d)
之前的数字和(?=\D)
之后的非数字或
(?<=\D)
前无数字,(?=\d)
后无数字有关
(?<=..)
和(?=..)
(以及其他)的更多信息,请访问http://www.regular-expressions.info/lookaround.html