如果您认为“实际上我想匹配am/is/are后面的单词的每个实例,而不仅仅是第一个”,这是个问题,因为您的.*组件将匹配第一个am/is/are之后的字符串的其余部分。E、 g.对于字符串"I am John and he is Steve",它将匹配' John and he is Steve'。如果你想让John和Steve分开,也许你可以限制你想要匹配的字符类。\w似乎很明智:
>>> string = "I am John and he is Steve"
>>> [m.group(2) for m in re.finditer(r"(am|is|are) (\w*)", string)]
['John', 'Steve']
解决方法之一是使用配分函数。有一个例子
输出:
^{pr2}$在这种情况下,我喜欢使用
finditer
,因为它返回的匹配对象比findall
返回的字符串更容易操作。可以继续匹配am/is/are,但也可以将字符串的其余部分与第二个子组匹配,然后从结果中仅提取该组。在根据您的模式结构,我猜您最多只希望字符串中有一个匹配项。考虑使用
^{pr2}$re.search
而不是findall或finditer。在如果您认为“实际上我想匹配am/is/are后面的单词的每个实例,而不仅仅是第一个”,这是个问题,因为您的
.*
组件将匹配第一个am/is/are之后的字符串的其余部分。E、 g.对于字符串"I am John and he is Steve"
,它将匹配' John and he is Steve'
。如果你想让John和Steve分开,也许你可以限制你想要匹配的字符类。\w
似乎很明智:印刷品:
^{pr2}$相关问题 更多 >
编程相关推荐