分配给命名组的Python正则表达式

Non*_*one 11 python regex variables variable-assignment

当你在python正则表达式中使用变量(是正确的单词吗?)时:"blah(?P\w +)"("value"将是变量),你怎么能让变量的值成为"之后的文本" blah"到行尾或某个字符没有注意变量的实际内容.例如,这是我想要的伪代码:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

注意:标题可能不易理解.那是因为我不知道怎么说.对不起,如果我引起任何混淆.

Dav*_*d Z 12

为此,你需要一个正则表达式

"say (?P<value>.+) endsay"
Run Code Online (Sandbox Code Playgroud)

句点匹配任何字符,加号表示应重复一次或多次...所以.+表示一个或多个字符的任何序列.当你放在endsay最后,正则表达式引擎将确保它匹配的任何东西实际上以该字符串结束.


Ale*_*lli 10

例如,如果文本是,则需要指定要匹配的内容

say hello there and endsay but some more endsay
Run Code Online (Sandbox Code Playgroud)

如果你想匹配整个hello there and endsay but some more子字符串,@ David的回答是正确的.否则,为了匹配hello there and,模式需要是:

say (?P<value>.+?) endsay
Run Code Online (Sandbox Code Playgroud)

在加号后加一个问号使其变得非贪婪(默认情况下它是贪婪的,在允许整体匹配的同时吞噬所有可能; 非贪婪意味着它尽可能地吞噬,同时允许整体匹配) .