2014-07-21 48 views
0

我使用的java.util.regex,我也很難構造正則表達式來提取此類型的文本:Java的正則表達式集團或操作員

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

提取parenthese的一部分,但我不知道如何將它們結合在一起,我想Manufacturer #:(.*)Price|Quantity和似乎它不起作用。

任何幫助,將不勝感激!

更新:我只是意識到下來文本的段落,也有一些pricequantity,這其中*搜索會吃掉整個文本...

回答

2

您可以(.*?)隨着路試忽略案例

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

+0

真正得到匹配的組中,文本中包含'quantity'和'price'否則哪個'*'貪婪地吃掉整個段落.. –

+0

正如我使用'。*?'所以它會以非貪婪的方式看待。看看更新的演示。 – Braj