Поиск регулярных выражений Python до определенного слова и исключение всего, что за ним

#python-3.x #regex #search

#python-3.x #регулярное выражение #Поиск

Вопрос:

У меня есть скрипт, в котором всегда есть «get the» и «get» в строке. «ОДИН ДВА ТРИ» может варьироваться, например, это также может быть «ТРИНАДЦАТЬ СОРОК» или «ШЕСТЬ». После этих вариантов всегда будет 2-й «get».

У меня есть следующий код:

 variable = 'get the ONE TWO THREE get FOUR FIVE'

myVariable = re.compile(r'(?<=get the) .*')
myVariableSearch = myVariable.search(variable)
mySearchGroup = myVariableSearch.group()
print(mySearchGroup) 

#prints ONE TWO THREE get FOUR FIVE
  

Я хочу, чтобы мой скрипт исключал 2-й «get» и все, что за ним. Мой желаемый результат должен быть просто «ОДИН ДВА ТРИ».

Как мне исключить это? Любая помощь была бы оценена!

Комментарии:

1. Используйте r'(?<=bgetsthes).*?(?=s*bgetb|Z)'

2. Спасибо, именно то, что мне было нужно!

Ответ №1:

Вы можете использовать

 bgets thes (.*?)(?=s*bgetb|$)
  

Смотрите демонстрацию регулярных выражений.

Подробные сведения

  • bgets thes — целое слово get , 1 пробелы, the , 1 пробелы
  • (.*?) — Группа 1:
  • (?=s*bgetb|$) — позитивный прогноз, для которого требуется 0 пробелов, а затем целое слово get или конец строки сразу справа от текущего местоположения.

Смотрите демонстрацию Python:

 import re
variable = 'get the ONE TWO THREE get FOUR FIVE'
myVariableSearch = re.search(r'bgets thes (.*?)(?=s*bgetb|$)', variable)
mySearchGroup = ''
if myVariableSearch:
    mySearchGroup = myVariableSearch.group(1)
print(mySearchGroup) 
# => ONE TWO THREE