Извлечь первое совпадение и слово после второго совпадения (до запятой), только если мы сопоставим два слова, которые мы ищем - PullRequest
0 голосов
/ 10 февраля 2020

Итак, у меня есть следующий текст:

Hipotecas:

Nos encontramos con varias hipotecas. La primera es una hipoteca que tiene 30.000 € dinero a favour de Banco XYZ, esta hipoteca ...

Я пытаюсь извлечь слова " hipoteca " и 1013 * слово, следующее за предложением "a favour de" до запятой . Таким образом, мое извлечение было бы: "hipoteca" и "Banco XYZ" .

Дело в том, что:

  • "hipoteca" должен появиться перед "aде де".
  • Если один из двух не появляется, я не хочу ничего извлекать.
  • Если "hipoteca" появляется несколько раз, просто извлеките одно совпадение.

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Рабочим регулярным выражением будет

r"\..+(hipoteca).+a favor de (.+),"

Объяснение

\. Буквенно соответствует ., поэтому вы гарантируете, что находитесь в новом предложении

.+ Допускаются произвольные символы в начале предложения

(hipoteca) Первая подходящая группа

.+ Произвольные символы

a favor de Этот текстовый сегмент должен быть в предложении

(.+) Вторая подходящая группа

, Вторая подходящая группа заканчивается запятой

Использование

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

text = "Nos encontramos con varias hipotecas. La primera es una hipoteca que tiene 30.000€ dinero a favor de Banco XYZ, esta hipoteca"

pattern = r"\..+(hipoteca).+a favor de (.+),"

m = re.search(pattern, text)

print(m.group(1))
# hipteca

print(m.group(2))
# Banco XYZ
2 голосов
/ 10 февраля 2020

Это похоже на работу

(hipotecas).+a favor de (.+),

Вы можете увидеть это здесь https://regex101.com/r/kKsdCb/1

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