Сопоставить определенную строку во второй строке текста с регулярным выражением - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в regex, и был бы признателен за некоторые рекомендации / помощь.

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

Вот текст:

123 где угодно Авеню Виннипег, Манитоба R3E 0L7 Канада Менеджер аптеки: от персоны Лицо Владелец лицензии на аптеку / владелец: 123456 Manitoba Ltd.

см. Правильное форматирование с кодом здесь

Моя цель - извлечь строку 'Manitoba' из второй строки, однако я хотел бы сделать ее динамической c, а не писать выражение для извлечения всегда Манитоба как состояние c. Я использовал приведенный ниже код для нацеливания на вторую строку:

(.*)(?=(\n.*){3}$)

(соответствует 3 строкам от последней строки, таким образом нацеливаясь на нужную строку)

I заметил, что в наборе данных провинция (Манитоба) всегда находится между двумя пробелами.

Можно ли добавить код, чтобы выражение предназначалось только для второй строки, а затем соответствовало первая строка между пробелами?

Возможно, с использованием ленивого выражения с положительным поиском?

Если я нацеливаю все совпадения между пробелами, это займет как 'Manitoba', так и 'R3E 0L7' который я не хочу.

Я хочу, чтобы он совпадал только с первым фрагментом текста между пробелами во второй строке.

Любая помощь очень ценится: -)

Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Одним из вариантов может быть совпадение с первой строкой, а затем захватить второе слово во вторых строках при захвате group 1 .

Затем сопоставить оставшуюся часть второй строки и подтвердить, что следует 3 раза в строке.

^.*\r?\n\S+[^\S\r\n]+(\S+).*(?=(?:\r?\n.*){3}$)

По частям:

  • ^ Начало строки
  • .*\r?\n Совпадение целых строк и новой строки
  • \S+ Соответствует 1+ непробельному символу (первое «слово»)
  • [^\S\r\n]+ Соответствует 1+ раз символу пробела, кроме новых строк
  • (\S+) Capture группа 1 Соответствует 1+ раз непробельному символу (второе «слово»)
  • .* Соответствует остальной части строки
  • (?= Позитивный прогноз, подтвердите, что следует справа:
    • (?:\r?\n.*){3}$ Соответствуйте 3 раза новой строке, затем 0+ раз любой, кроме новой строки, и подтвердите конец строки
  • ) Закрыть Lookahead

Regex demo

Вместо этого вы также можете превратить Lookahead в совпадение

* 10 48 *

Regex demo

...