#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+ цифр или переходов строки, за которыми следует слово Подпись.
Комментариев нет:
Отправить комментарий