2014-12-26 34 views
1

我有與this link在Java正則表達式中與多個模式獲取重疊匹配

相同的問題,但具有多個模式。我的正則表達式是這樣的:

Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)"); 

如果我的示例文本,

XYZ路123號套房

我的願望輸出,

XYZ路123號

123套件

但我得到

XYZ路123號

只。

在此先感謝!

+1

你能解釋一下你的需求? –

回答

1

你可以嘗試下面的正則表達式,它使用肯定的lookahead斷言。

(?=(\b\w+ Road \d+\b)|(\b\d+ suite\b)) 

DEMO

String s = "XYZ Road 123 Suite"; 
Matcher m = Pattern.compile("(?i)(?=(\\b\\w+ Road \\d+\\b)|(\\b\\d+ suite))").matcher(s); 
while(m.find()) 
{ 
    if(m.group(1) != null) System.out.println(m.group(1)); 
    if(m.group(2) != null) System.out.println(m.group(2)); 
} 

輸出:

XYZ Road 123 
123 Suite 
+0

如果我有一些15k組,我可能需要添加15k如果塊? –

+0

對不起,我不清楚。你能解釋更多嗎? –

+0

在上面的例子中,我有2組即2個正則表達式匹配。因此,如你所說,我可以使用m.group(1),m.group(2)來獲得匹配的文本。同樣如果我有15k組(正則表達式)我需要做什麼? –

0

這樣的事情,也許?

Pattern p = Pattern.compile("([\\w ] Road) (\\d+) (Suite)"); 
Matcher m = p.matcher(input); 
if(m.find) { 
    System.out.println(m.group(1) + " " + m.group(2)); 
    System.out.println(m.group(2) + " " + m.group(3)); 
}