Text = "AAA1.0BBB2.2CCC33.3"
R.Expression = ([A-Z]{3}[0-9]*\.[0-9]*)*
预期输出
AAA1.0<br>
BBB2.2<br>
CCC33.3<br>
Matcher.group(0)
仅返回CCC33.3.
有没有办法让我得到预期的输出。
由于
答案 0 :(得分:1)
[A-Z]{3}[0-9]*[.][0-9]*
只需使用此功能,因为正则表达式引擎始终只会记住捕获多个连续组时的最后一个组。
答案 1 :(得分:0)
是的,只需在while块中调用matcher.find()
并删除第一组:
String Text = "AAA1.0BBB2.2CCC33.3";
Pattern pattern = Pattern.compile("[A-Z]{3}[0-9]*\\.[0-9]*");
Matcher matcher = pattern.matcher(Text);
while (matcher.find()){
System.out.println(matcher.group(0));
}
请参阅IDEONE demo
请注意,必须对句点符号进行双重转义才能将其视为文字句点。
整个模式周围捕获组的问题在于捕获的文本存储在1个缓冲区中,每次捕获文本时都会重写该缓冲区。因此,您只能获得最后一个CCC33.3
。