Регулярное выражение Python в нескольких строках - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь сопоставить шаблон регулярного выражения в нескольких строках. Шаблон начинается и заканчивается подстрокой, обе из которых должны быть в начале строки. Я могу сопоставить строки, но не могу указать, что конечный шаблон также должен находиться в начале строки.

Пример строки:

Example=N      ; Comment Line One error=

; Comment Line Two.

Desired=

Я пытаюсь найти соответствие от Example= до Desired=. Это будет работать, если error= нет в строке. Однако, когда он присутствует, я сопоставляю Example=N ; Comment Line One error=

config_value = 'Example'
pattern = '^{}=(.*?)([A-Za-z]=)'.format(config_value)
match = re.search(pattern, string, re.M | re.DOTALL)

Я тоже пробовал:

config_value = 'Example'
pattern = '^{}=(.*?)(^[A-Za-z]=)'.format(config_value)
match = re.search(pattern, string, re.M | re.DOTALL)

1 Ответ

0 голосов
/ 02 мая 2018

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

config_value = 'Example'
pattern=r'(?sm)^{}=(.*?)(?=[\r\n]+\w+=|\Z)'.format(config_value)
match = re.search(pattern, s)
if match:
    print(match.group(1))

См. Демоверсию Python .

Детали шаблона

  • (?sm) - re.DOTALL и re.M включены
  • ^ - начало строки
  • Example= - подстрока
  • (.*?) - Группа 1: любые 0+ символов, как можно меньше
  • (?=[\r\n]+\w+=|\Z) - положительный прогноз, требующий наличия 1+ символов CR или LF, за которыми следуют 1 или более символов слова, за которыми следует знак = или конец строки (\Z).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...