У меня такая же проблема, как в этой ссылке
но с несколькими шаблонами. Мое регулярное выражение похоже на:
Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");
Если мой образец текста,
Люкс XYZ Road 123
Мое желание - это,
XYZ Road 123
123 номера
Но я получаю
XYZ Road 123
только.
Заранее спасибо!
Вы можете попробовать следующее регулярное выражение, которое использует положительное утверждение.
(?=(\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
(?=(\b[\w]+ [\d]+))|(?=(\b[\d]+ suite))|(?=(\b[\w]+ road))
Попробуйте это. Посмотрите демо. Возьмите захват.
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));
}