繁体   English   中英

在Java正则表达式中使用多种模式获取重叠匹配

[英]Getting overlapping matches with multiple patterns in Java regex

我有与此链接相同的问题

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

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

如果我的示例文字是

XYZ路123号套房

我的愿望输出是

XYZ路123号

123套房

但是越来越

XYZ路123号

只要。

提前致谢!

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

试试看,看演示,捕捉截图。

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

使用positive 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

这样的事,也许吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM