Регулярный выражения, объясните строку. Python

c = re.findall("(?s)—(.*?)[—.?]", a)

я знаю, что оно делает, берёт все данные, которые находятся между символами — и —.? , но вот как именно работает эта строка совсем непонятно.


Ответы (1 шт):

Автор решения: dIm0n
(?s)—(.*?)[—.?]
  • (?s) — инлайн-модификатор/флаг, который говорит, что далее в паттерне воспринимать . как любой символ, включая перевод строки

  • — начинаем с символа тире

  • (.*?) — 0+ любых символов (за счёт предыдущего флага) в lazy-режиме, т.е. как можно меньше

  • [—.?] — заканчиваем одним из трёх символов: тире, точка, вопросительный знак (в таком контексте . воспринимается именно как точка, а не как любой символ, несмотря на флаг)

Из-за наличия флага получаем, например, матч тут:

wombtowm — rgr

tgw — wtbwrbtwtr

Из-за lazy-режима получаем, например, именно такой матч тут:

wombtowm — rgr

tgw — tgw — wtbwrbtwtr

→ Ссылка