在Java正则表达式中与多个模式重叠匹配

时间:2014-12-26 11:16:45

标签: java regex

我遇到与this link

相同的问题

但有多种模式。我的正则表达式如下:

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

如果我的示例文字是,

  

XYZ Road 123 Suite

我的愿望输出是,

  

XYZ Road 123

     

123套房

但我正在

  

XYZ Road 123

提前致谢!

3 个答案:

答案 0 :(得分:1)

(?=(\b[\w]+ [\d]+))|(?=(\b[\d]+ suite))|(?=(\b[\w]+ road))

试试这个。参见demo.Grab捕获。

https://regex101.com/r/dU7oN5/16

使用positive lookahead来避免使用字符串。

答案 1 :(得分:1)

您可以尝试使用正向前瞻断言的以下正则表达式。

(?=(\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

答案 2 :(得分: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));
}