Python: Как извлечь слово до и после матча с помощью регулярных выражений - PullRequest
1 голос
/ 20 марта 2019

Приведем следующие данные в качестве образца

input_corpus = "это пример. \ N Я пытаюсь его извлечь. \ N"

Я пытаюсь извлечь ровно 2 слова до и после. \ N, используя следующий код

for m in re.finditer('(?:\S+\s+){2,}[\.][\n]\s*(?:\S+\b\s*){0,2}',input_corpus):
   print(m)

Ожидаемый результат:

an example. I am
extract it.

Фактический результат: ничего не захвачено

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

1 Ответ

3 голосов
/ 20 марта 2019

Вы можете использовать это регулярное выражение:

r'(?:^|\S+\s+\S+)\n(?:\s*\S+\s+\S+|$)'

Демонстрация RegEx

Код:

>>> input_corpus = "this is an example.\n I am trying to extract it.\n"
>>> print re.findall(r'(?:^|\S+\s+\S+)\n(?:\s*\S+\s+\S+|$)', input_corpus)
['an example.\n I am', 'extract it.\n']

Подробности:

  • (?:^|\S+\s+\S+): совпадение с двумя предыдущими словами или начало строки
  • \n: сопоставление новой строки
  • (?:\s*\S+\s+\S+|$): Сопоставить следующие 2 слова или конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...