java正则表达式失败多个组
问题描述:
正则表达式在大多数正则表达式工具中工作正常。但是,它不在java代码中工作。任何人都可以请指教?java正则表达式失败多个组
String text="CHANGE FEE/ADD COLLECT DATA "+
"1.1 COLOR/RED TOMATO "+
"CF USD10.00 "+
" "+
"2.2 COLOR/DARK BLUE PLUM "+
"CF USD11.00 "+
" ";
String patterString = "([0-9]{1,3}\\.[0-9]{1,3})\\s.+\\s*CF\\s+[a-zA-Z]{1,5}([0-9]{1,10}.[0-9]{2})";
Pattern pattern = Pattern.compile(patterString);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("found: " + matcher.group(1) +">>>"+ matcher.group(2));
}
实际输出:
found: 1.1>>>11.00
预期输出:
found: 1.1>>>10.00
found: 2.2>>>11.00
答
你的正则表达式必须是:
String patterString = "([0-9]{1,3}\\.[0-9]{1,3}).*?CF\\s+[a-zA-Z]{1,5}([0-9]{1,10}.[0-9]{2})";
其中产量:
found: 1.1>>>10.00
found: 2.2>>>11.00
我没有看过的文档,但猜测与find()
迭代时,它隐含在MULTILINE模式,让你的正则表达式\\s.+\\s*
的部分是贪婪 - 与.*?
更换这个贪婪;-)
编辑,样品源:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexFind {
public static void main(String[] args)
{
String text="CHANGE FEE/ADD COLLECT DATA "+
"1.1 COLOR/RED TOMATO "+
"CF USD10.00 "+
" "+
"2.2 COLOR/DARK BLUE PLUM "+
"CF USD11.00 "+
" ";
//String patterString = "([0-9]{1,3}\\.[0-9]{1,3})\\s.+\\s*CF\\s+[a-zA-Z]{1,5}([0-9]{1,10}.[0-9]{2})";
String patterString = "([0-9]{1,3}\\.[0-9]{1,3}).*?CF\\s+[a-zA-Z]{1,5}([0-9]{1,10}.[0-9]{2})";
Pattern pattern = Pattern.compile(patterString);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("found: " + matcher.group(1) +">>>"+ matcher.group(2));
}
}
}
@AvinashRaj有很多使用,而在卷筒纸的例子。这里是一个http://tutorials.jenkov.com/java-regex/matcher.html#multiple-groups – Boopathy