在Java正则表达式中与多个模式重叠匹配
我遇到与此链接相同的问题
但有多种模式。 我的正则表达式如下:
Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");
如果我的示例文本是,
XYZ Road 123 Suite
我的愿望输出是,
XYZ路123号
123套房
但我得到了
XYZ路123号
只要。
提前致谢!
您可以尝试使用正向前导断言的下面的正则表达式。
(?=(\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
(?=(\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)); }