Регулярные выражения Python, назначающие названным группам

Когда вы используете переменные (это правильное слово?) в регулярных выражениях python, таких как: "blah (? P\w +)" ( "значение" будет переменной), как вы могли бы сделать значение переменной текст после "блаха" до конца строки или определенного персонажа, не обращая внимания на фактическое содержимое переменной. Например, это псевдокод для того, что я хочу:

>>> import re
>>> p = re.compile("say (?P<value>continue_until_text_after_assignment_is_recognized) endsay")
>>> m = p.match("say Hello hi yo endsay")
>>> m.group('value')
'Hello hi yo'

Примечание. Заголовок, вероятно, непонятен. Это потому, что я не знал, как это сказать. Извините, если я вызвал какую-либо путаницу.

Ответ 1

Для этого вам нужно регулярное выражение

"say (?P<value>.+) endsay"

Период соответствует любому символу, а знак плюса указывает, что это нужно повторять один или несколько раз... поэтому .+ означает любую последовательность из одного или нескольких символов. Когда вы положите endsay в конец, механизм регулярных выражений будет удостовериться, что все, что он соответствует, действительно заканчивается этой строкой.

Ответ 2

Вам нужно указать, что вы хотите совместить, если текст есть, например,

say hello there and endsay but some more endsay

Если вы хотите совместить целую подстроку hello there and endsay but some more, ответ @David верен. В противном случае, чтобы соответствовать только hello there and, шаблон должен быть:

say (?P<value>.+?) endsay

с вопросительным знаком после знака "плюс", чтобы сделать его неживым (по умолчанию он жадный, поглощающий все, что возможно, при разрешении общего совпадения; нежелательный означает, что он зажимается как маленький насколько это возможно, снова, позволяя в целом совпадение).