Java正则表达式组OR运算符

时间:2014-07-21 20:02:26

标签: java regex

我正在使用java.util.regex,我很难构建一个能够提取此类文本的正则表达式:

Manufacturer : ABC Inc. Price : ...
Manufacturer : ABC Inc. Quantity : ...

我想要的是公司名称,该公司名称来自文字Manufacturer :之后的不同文字,但它可能会跟随PriceQuantity,我真的不知道如何在Java的。

到目前为止我做了什么:

Pattern.compile("Manufacturer #:(.*)Price")
Pattern.compile("Manufacturer #:(.*)Quantity")

我可以使用

在括号中提取部分
Pattern mypattern = Pattern.compile("Manufacturer #:(.*)Price");
Matcher mymatcher = mypattern.matcher("Manufacturer #: ABC company Price");
if (mymatcher.find()) {
    WhatIWant = mymatcher.group(1);
}

但是我不知道如何将它们组合在一起,我尝试Manufacturer #:(.*)Price|Quantity并且看起来它不起作用。

任何帮助将不胜感激!

更新:我刚刚意识到文字段落,有一些pricequantity,其中*搜索会占用整个文字......

1 个答案:

答案 0 :(得分:2)

您可以尝试使用 Lazy (.*?)方式以及忽略大小写

Pattern mypattern = 
         Pattern.compile("Manufacturer\\s*#?:\\s*(.*?)\\s*(Price|Quantity)",
                                                       Pattern.CASE_INSENSITIVE);
Matcher mymatcher = mypattern.matcher("Manufacturer #: ABC company Price");
if (mymatcher.find()) {
    System.out.println(mymatcher.group(1)); // ABC company
}

注意:匹配多行

Pattern mypattern = 
         Pattern.compile("Manufacturer\\s*#?:\\s*(.*?)\\s*(Price|Quantity)",
                                   Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);

从索引1获取匹配的组。

Live demo

相关问题