Python 正则表达式赋值给命名组

11 投票
2 回答
14605 浏览
提问于 2025-04-15 22:00

当你在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'

注意:标题可能不太好理解。这是因为我不知道该怎么说。如果造成了困惑,我很抱歉。

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 时,正则表达式引擎会确保它匹配的内容确实是以这个字符串结尾的。

撰写回答