RE 将每个单词与模式的一部分匹配

RE Match each word with a part of the pattern

我认为最好用一个例子来说明。

我有 RE 模式 choco_icecream = "(do|does) \w+ (loves|love|likes|like) (choco|chocolate) (ice-cream|icecream|ice cream)"。 我想检查 example = "Does Jessica like Chocolate Icecream".lower() 是否匹配 choco_icecream.

examplechoco_icecream的匹配,但是我想知道example的哪个词对应choco_icecream的一个元素。

我想要一本字典。理想的输出将如下所示:{"(do|does)":"does", "\w+":"jessica", "(loves|love|likes|like)":"like", "(choco|chocolate)":"chocolate", "(ice-cream|icecream|ice cream)":"icecream"}

我怎样才能做到这一点?

我认为如果您只是稍微尝试一下这个以及文档,那么这一切都会很清楚。

import re

choco_icecream = "(do|does) (\w+) (loves|love|likes|like) (choco|chocolate) (ice-cream|icecream|ice cream)"
example = "Does Jessica like Chocolate Icecream".lower()

x = re.match(choco_icecream, example)
print(x)
print(x.groups())

输出:

<re.Match object; span=(0, 36), match='does jessica like chocolate icecream'>
('does', 'jessica', 'like', 'chocolate', 'icecream')

打印整个 match 对象会得到完整的匹配项,但是表达式中的每组括号都会创建一个新的“组”,并且这些组都会单独返回。

请注意,我修改了您的正则表达式,使名称也成为一个组。