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 
+0

@AvinashRaj有很多使用,而在卷筒纸的例子。这里是一个http://tutorials.jenkov.com/java-regex/matcher.html#multiple-groups – Boopathy

你的正则表达式必须是:

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)); 
     } 
    } 
} 
+0

不,上述模式不起作用。 – Boopathy

+0

这是给我,添加代码,请参阅编辑^ – earcam