模式不匹配文本文件中的所有短语



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

  1. 红色汽车
  2. 蓝色或红色
  3. 红色
  4. 汽车

因此,如果我搜索:"红色汽车"。我只将"红色汽车"视为唯一的结果,但是我想要的是获得以下结果:

  1. 红色汽车
  2. 红色
  3. 红色
  4. 汽车

因为这些字符串在文本文件中。蓝色或红色,"或"是逻辑的。因此,我想匹配其中的任何一个,而不是两者兼而有之。我究竟做错了什么? 任何帮助都将受到赞赏。我的代码如下:

    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());
    }
   }
 }

尝试传递此正则以下: -

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

这将匹配: -

0 or 1红色,然后是0 or more空间,然后是0 or 1 CAR

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

注意: - 上面的正则义务不匹配:- 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())替换您的CC_7。

您的模式应为Red|Car

相关内容

  • 没有找到相关文章

最新更新