我正在使用java.util.regex
,我很难构建一个能够提取此类文本的正则表达式:
Manufacturer : ABC Inc. Price : ...
Manufacturer : ABC Inc. Quantity : ...
我想要的是公司名称,该公司名称来自文字Manufacturer :
之后的不同文字,但它可能会跟随Price
或Quantity
,我真的不知道如何在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
并且看起来它不起作用。
任何帮助将不胜感激!
更新:我刚刚意识到文字段落,有一些price
和quantity
,其中*
搜索会占用整个文字......
答案 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获取匹配的组。