我有與this link在Java正則表達式中與多個模式獲取重疊匹配
相同的問題,但具有多個模式。我的正則表達式是這樣的:
Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");
如果我的示例文本,
XYZ路123號套房
我的願望輸出,
XYZ路123號
123套件
但我得到
XYZ路123號
只。
在此先感謝!
我有與this link在Java正則表達式中與多個模式獲取重疊匹配
相同的問題,但具有多個模式。我的正則表達式是這樣的:
Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");
如果我的示例文本,
XYZ路123號套房
我的願望輸出,
XYZ路123號
123套件
但我得到
XYZ路123號
只。
在此先感謝!
你可以嘗試下面的正則表達式,它使用肯定的lookahead斷言。
(?=(\b\w+ Road \d+\b)|(\b\d+ suite\b))
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
如果我有一些15k組,我可能需要添加15k如果塊? –
對不起,我不清楚。你能解釋更多嗎? –
在上面的例子中,我有2組即2個正則表達式匹配。因此,如你所說,我可以使用m.group(1),m.group(2)來獲得匹配的文本。同樣如果我有15k組(正則表達式)我需要做什麼? –
(?=(\b[\w]+ [\d]+))|(?=(\b[\d]+ suite))|(?=(\b[\w]+ road))
試試看看demo.Grab抓取。
https://regex101.com/r/dU7oN5/16
使用positive lookahead
避免串被消耗。
這樣的事情,也許?
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));
}
你能解釋一下你的需求? –