在Java正则表达式中与多个模式重叠匹配 [英] Getting overlapping matches with multiple patterns in Java regex

查看:410
本文介绍了在Java正则表达式中与多个模式重叠匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到与此链接相同的问题

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

but with multiple patterns. My regex is like:

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

如果我的示例文本是,


XYZ Road 123套房

XYZ Road 123 Suite

我的愿望输出是,


XYZ Road 123

XYZ Road 123

123套房

但我得到了


XYZ Road 123

XYZ Road 123

仅限。

提前致谢!

推荐答案

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

You could try the below regex which uses positive lookahead assertion.

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

这篇关于在Java正则表达式中与多个模式重叠匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆