Regex для захвата слов разделенных терминов - PullRequest
0 голосов
/ 26 апреля 2019

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

FIELDA: wiz AND FIELDB: foo AND FIELDB: bar AND FIELDB: baz.......

шаблон FIELDB :( некоторое значение) будет присутствовать от 0 до N раз, всегда разделенных термином AND.FIELDA всегда присутствует

Существует ли шаблон регулярного выражения, который я могу использовать для захвата всех значений:

wiz, foo, bar, baz

1 Ответ

2 голосов
/ 26 апреля 2019

Вы можете использовать регулярное выражение на основе lookarounds и сопоставить все значения, которые хотите использовать с помощью этого регулярного выражения,

(?<=FIELD[AB]:)\S+(?= AND|$)

Regex Объяснение:

  • (?<=FIELD[AB]:) - Позитивный взгляд позади, чтобы гарантировать, что сопоставленному тексту предшествует либо FIELDA, либо FIELDB
  • \S+ - соответствует одному или нескольким не пробелам текста
  • (?= AND|$) - Позитивный взгляд вперед, чтобы убедиться, что за сопоставленным текстом следует либо AND, либо конец строки с использованием $

Regex Demo

Демонстрационный код Java

String s = "FIELDA:wiz AND FIELDB:foo AND FIELDB:bar AND FIELDB:baz";
Pattern p = Pattern.compile("(?<=FIELD[AB]:)\\S+(?= AND|$)");
Matcher m = p.matcher(s);

while (m.find()) {
    System.out.println(m.group());
}

Печать

wiz
foo
bar
baz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...