我正在使用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
,其中 *
搜索将耗尽全文...
最佳答案
您可以尝试使用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中获取匹配的组。
关于Java 正则表达式组 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873663/