Python 正则表达式赋值给命名组
当你在Python的正则表达式中使用变量(这个词用得对吗?)时,比如这样写:“blah (?P
>>> 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'
注意:标题可能不太好理解。这是因为我不知道该怎么说。如果造成了困惑,我很抱歉。
2 个回答
10
你需要明确你想要匹配什么内容,比如说,如果文本是:
say hello there and endsay but some more endsay
如果你想匹配整个 hello there and endsay but some more
这段文字,@David的回答是对的。否则,如果你只想匹配 hello there and
,那么模式需要是:
say (?P<value>.+?) endsay
在加号后面加一个问号,这样就变成了 非贪婪模式(默认情况下是 贪婪模式,会尽可能多地匹配所有内容,同时允许整体匹配;而 非贪婪模式 则意味着它会尽量少地匹配内容,同样也允许整体匹配)。
12
为了实现这个,你需要一个正则表达式:
"say (?P<value>.+) endsay"
这里的句点(.)可以匹配任何字符,而加号(+)表示前面的内容可以出现一次或多次。所以 .+
就是说可以匹配一个或多个字符的任何组合。当你在最后加上 endsay
时,正则表达式引擎会确保它匹配的内容确实是以这个字符串结尾的。