Java 正则表达式组 OR 运算符

标签 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,其中 * 搜索将耗尽全文...

最佳答案

您可以尝试使用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

关于Java 正则表达式组 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873663/

相关文章:

java - 从输出 jsoup 中删除数字

java - 如何确定正在运行的 JVM 上的 MaxDirectMemorySize?

regex - redis keys 命令不适用于某些字符

html - 如何在 iOS 中删除字符串中的评论 HTML 元素

java - 已订购 SQlite 数据库(基于 XML feed)

即使安装了 Java 11,Java Runtime 也只能识别 52.0 以下的类文件版本

c++ - 使用 C++ std::regex_replace 匹配不同数量的行

c# - 正则表达式:查找以下一个单词开头的相同字母结尾的单词

java - java中从url加载图片

php - 如何匹配不包含单词的字符串?