Получение совпадений с несколькими шаблонами в регулярном выражении Java

1

У меня такая же проблема, как в этой ссылке

но с несколькими шаблонами. Мое регулярное выражение похоже на:

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

Если мой образец текста,

Люкс XYZ Road 123

Мое желание - это,

XYZ Road 123

123 номера

Но я получаю

XYZ Road 123

только.

Заранее спасибо!

  • 1
    не могли бы вы объяснить свои потребности?
Теги:

3 ответа

1
Лучший ответ

Вы можете попробовать следующее регулярное выражение, которое использует положительное утверждение.

(?=(\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
  • 0
    Если у меня есть несколько групп по 15 тысяч, могу ли я добавить 15 тысяч блоков?
  • 0
    извините, неясно для меня. Не могли бы вы объяснить больше?
Показать ещё 2 комментария
1
(?=(\b[\w]+ [\d]+))|(?=(\b[\d]+ suite))|(?=(\b[\w]+ road))

Попробуйте это. Посмотрите демо. Возьмите захват.

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

Используйте positive lookahead чтобы избежать потребления струны.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню