0

我的程序未显示所需的匹配结果。我的文本文件包含以下行:

  1. 红车
  2. 蓝色或红色
  3. 红色的

所以如果我搜索:“红色汽车”。我只得到“红车”作为唯一的结果,但我想要的是得到以下结果:

  1. 红车
  2. 红色的
  3. 红色的

因为这些字符串在文本文件中。蓝色或红色,“或”是合乎逻辑的。所以我想匹配它们中的任何一个而不是两者。我究竟做错了什么?任何帮助表示赞赏。我的代码如下:

    public static void main(String[] args) {
        // TODO code application logic here
        //String key;
        String strLine;
        try{
    // Open the file that is the first 
    // command line parameter   
    FileInputStream fstream = new FileInputStream("C:\\textfile.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        Scanner input  = new Scanner (System.in);         
        System.out.print("Enter Your Search:  ");
        String key = input.nextLine();

        while ((strLine = br.readLine()) != null) {     
        Pattern p = Pattern.compile(key); // regex pattern to search for
        Matcher m = p.matcher(strLine);  // src of text to search
        boolean b = false;
        while(b = m.find()) {  
        System.out.println( m.start() + " " + m.group()); // returns index and match
    // Print the content on the console
        }
        }
        //Close the input stream
     in.close();  
        }catch (Exception e){//Catch exception if any
       System.err.println("Error: " + e.getMessage());
    }
   }
 }
4

2 回答 2

1

尝试通过这个正则表达式: -

"((?:Red)?\\s*(?:or)?\\s*(?:Car)?)"

这将匹配: -

0 or 1红色后接0 or more空格,后接0 or 1Car

(?:...)是非捕获组

注意: -上述正则表达式不匹配: - Car Red

如果您的订单可以反转,那么您可以使用:-

"((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)"

并从group(0).

例如:-

String strLine = "Car or Red";
Pattern p = Pattern.compile("((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)"); 
Matcher m = p.matcher(strLine);  // src of text to search

if (m.matches()) {  
    System.out.println(m.group()); // returns index and match
}

输出: -

Car or Red

将您的替换while(b = m.find())if (m.matches()), 因为您想匹配完整的字符串,并且只匹配一次。

于 2012-11-08T21:47:43.593 回答
-1

你的模式应该是Red|Car.

于 2012-11-08T21:51:19.893 回答