Поиск строки перед определенной фразой - PullRequest
0 голосов
/ 05 июля 2018

Допустим, строка, представляющая фразу, является "Holy it is changing again and again"

Я хочу напечатать слово "changing" до "again and again", но это слово может каждый раз отличаться. Поэтому мне нужно извлечь слово перед фразой "again and again". Фраза "holy it is" не должна быть извлечена.

Как я могу сделать это с Python?

Я думал об использовании Regex, как здесь регулярное выражение Python для сопоставления слова до <</a>, но я не слишком уверен, как правильно его кодировать.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018
import re

text = '''

Holy it is changing again and again
Holy it is not changing again and again
Holy it has changed again and again
Holy it has changed once
Holy it used to change again and again
'''

prog = re.compile(r'(\w+) again and again');
for line in text.splitlines():
  x = prog.search(line)
  if(x): print(x.group(1))

Это выводит:

changing
changing
changed
change
0 голосов

Чтобы соответствовать любому слову, за которым следует "again and again", используйте это регулярное выражение:

  • ([\w]*) again and again

Если вы хотите добавить больше символов, например апостроф, замените [\w] на [\w'] и аналогично для других символов в квадратных скобках (для некоторых требуется экранирование).

  • Свят, это меняется снова и снова !
  • Мы будем играть снова, и играть снова и снова !
  • OMG снова и снова !
  • Давайте пойдем снова и снова . Снова и снова мы идем!
  • Я снова и снова получаю roomba'd (требуется добавить ')
  • Foo стал A-B-C снова и снова , Бар и Баз. (требуется добавить экранированный дефис)
  • Больше примеров регулярных выражений!

Чтобы найти все вхождения этого шаблона, используйте

Регулярное выражение match = re.findall("([\w']*) again and again", phrase), где ([\w']*) - любое слово (последовательность символов слова, включая апостроф. Возвращает список всех слов, за которыми следует «снова и снова».

phrase = "Holy it is changing again and again!"
match = re.findall("([\w']*) again and again", phrase)
# match is ['changing']

phrase = "Going again, going again and again, and finishing again and again!"
match = re.findall("([\w']*) again and again", phrase)
# match is ['going', 'finishing']

phrase = "Defeated again and again! I got ninja'd again and again!"
match = re.findall("([\w']*) again and again", phrase)
# match is ['Defeated', "ninja'd"]
...