Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

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

#python #регулярные_выражения


Подскажите, пожалуйста, следующий момент насчет регулярных выражений.
Ранее я всегда пользовался ими следующим образом: брал искомое слово или фразу и
далее от него шел по тексту и вытаскивал необходимые значения.
Сейчас мне необходимо сделать то же самое: найти ключевое слово, но двигаться не
вперед по тексту, а обратно.

Пример:

"Заключение:
1
2
3
Подпись"


Мне надо оттолкнуться от Подпись и идти вверх по тексту, чтобы достать значения 3, 2, 1.

Каким образом это можно сделать?
    


Ответы

Ответ 1



Всегда, когда кажется, что нужно "найти ключевое слово, но двигаться не вперед по тексту, а обратно", нужно подумать о том, как "найти все подстроки, удовлетворяющие нужному шаблону, после которых следует ключевое слово". Некоторые библиотеки регулярных выражений могут начинать поиск с конца строки к её началу, при этом не инвертируя текст, т.е. направление чтения шаблонов в регулярке остается неизменным - слева направо. Таким образом, в данном случае проблема такова: найти все числа, которые разделены символом перевода строки, вплоть до строки, начинающейся со слова Подпись. Используйте для первого такого совпадения (демо): print(re.search(r'(?m)^(\d[\d\r\n]*)^Подпись', s).group(1).split()) Или все возможные подстроки: print(re.findall(r'(?m)^\d+(?=[\d\r\n]*^Подпись)', s)) См. демо регулярного выражения См. демо на Python. В первом примере (?m)^(\d[\d\r\n]*)^Подпись находит начало строки (или позицию после перехода строки), затем захватывает любую цифру и 0+ переходов строки или цифр, а затем находит Подпись в начале строки. Затем значение первой подгруппы разбивается по пробельным символам. Во втором случае ищутся все цифры от начала строки, за которыми следуют 0+ цифр или переходов строки, за которыми следует слово Подпись.

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

Отправить комментарий