Присвоение регулярных выражений Python именованным группам

Когда Вы используете переменные (который является корректным словом?) в регулярных выражениях Python как это: "вздор (? 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'

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

11
задан David Z 26 April 2010 в 00:21
поделиться

2 ответа

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

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

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

12
ответ дан 3 December 2019 в 05:11
поделиться

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

say hello there and endsay but some more endsay

Если вы хотите сопоставить всю здравствуйте и кончите, но еще несколько подстрок , ответ @David правильный . В противном случае, чтобы соответствовать только hello there и , шаблон должен быть:

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

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

10
ответ дан 3 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: