我遇到与this link
相同的问题但有多种模式。我的正则表达式如下:
Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");
如果我的示例文字是,
XYZ Road 123 Suite
我的愿望输出是,
XYZ Road 123
123套房
但我正在
XYZ Road 123
仅
提前致谢!
答案 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))
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));
}