Когда Вы используете переменные (который является корректным словом?) в регулярных выражениях 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'
Примечание: Заголовок, вероятно, не понятен. Это вызвано тем, что я не знал, как сказать это. Извините, если я вызвал какой-либо беспорядок.
Для этого вам понадобится регулярное выражение
"say (?P<value>.+) endsay"
Точка соответствует любому символу, а знак плюс указывает, что это следует повторить один или несколько раз ... поэтому . +
означает любую последовательность из одного или нескольких символов. Когда вы помещаете enday
в конец, обработчик регулярных выражений будет следить за тем, чтобы все, что ему соответствовало, на самом деле оканчивалось этой строкой.
Вам нужно указать, что вы хотите сопоставить, если текст имеет вид, например,
say hello there and endsay but some more endsay
Если вы хотите сопоставить всю здравствуйте и кончите, но еще несколько подстрок
, ответ @David правильный . В противном случае, чтобы соответствовать только hello there и
, шаблон должен быть:
say (?P<value>.+?) endsay
со знаком вопроса после знака плюс, чтобы сделать его нежадным (по умолчанию это ] жадный , поглощающий все, что возможно, позволяя при этом полное совпадение; не жадный означает, что он поглощает как мало , насколько это возможно, опять же, позволяя полное совпадение).