Условие Python с регулярным выражением

1

У меня есть файл с этими данными:

PAS_BEGIN_0009999
    T71_MANUFACTURER_4=98
    T71_COLOR_ID_7=000
    T71_OS_7=08
PAS_END_0009999

PAS_BEGIN_0009996
    T72_VAS_SERVICE_IDENTIFIER_6=
    T72_ORDER_NB_7=0003
    T72_TECHNOLOGY_7=01
PAS_END_0009996

TPV_BEGIN
    PAS_20819001=3600000 
TPV_END

Как я могу просто изолировать контент между PAS_BEGIN_0009996 и PAS_BEGIN_0009996

Вот ссылка для примера: https://regexr.com/3vmeq

Он что-то находит, но мой код на Python ничего не находит.

if re.match("PAS_BEGIN_0009999([\S\s]*)PAS_END_0009999", line):
    data.append(line)
    print(line)

Может ли кто-нибудь помочь мне в этом? Спасибо

  • 2
    re.match выполняет поиск только в начале строки. Используйте re.search . Кроме того, измените [\S\s]* на [\S\s]*?
  • 0
    Я не думаю, что моя проблема только с поиском или соответствием. Переходя к поиску, он не меняет результат
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Вы читаете текстовый файл по строкам, но ваш ожидаемый матч находится на нескольких строках. Вам нужно прочитать весь файл в переменной, а затем запустить регулярное выражение, подобное вашему, или, лучше, шаблон, например a.*?b с параметром re.DOTALL . может соответствовать символам прерывания строки.

Таким образом, вы можете использовать что-то вроде

import re
fpath = 'your_file_path.txt'
data = ''
pattern=r'PAS_BEGIN_0009999(.*?)PAS_END_0009999'
with open(filepath, "r") as f:
    contents = f.read()
    m = re.search(pattern, contents)
    if m:
        data = m.group(1) # or '.group() if you need to include PAS_BEGIN_0009999 and PAS_END_0009999

Если вам нужно найти несколько вхождений, замените часть re.search (все строки после contents) на

data = re.findall(pattern, contents)

См. Демо-версию regex

  • 1
    Спасибо, с комментарием из моего поста, вы решили часть моей проблемы;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню