此问题在此处已有答案:
python regex: duplicate names in named groups(2个答案)
10天前关闭。
我想把这条线与任何一种模式匹配。
模式1:fname lname
模式二:lname,fname
示例字符串:
Frank Delo
Delo,Frank
groupdict()
两个字符串的输出应返回相同的结果
{"fname":"Frank",
"lname":"Delo"
}
我是这么试的
r1 = "^(?P<fname>[a-zA-Z]+)(?: (?P<lname>[a-zA-Z]+))?$"
r2 = "^(?P=lname),(?P=fname)$"
print(re.match("|".join([r1,r2]), "Frank Delo").groupdict()) # Works fine
print(re.match("|".join([r1,r2]), "Delo,Frank").groupdict()) # Doesn't match
在''后面不能使用命名组引用吗|”接线员?
另外,请注意,我不想单独编译这些模式
1条答案
按热度按时间ncgqoxb01#
有两个问题:
(?P=lname)
是一个 backreference,这意味着它匹配任何(?P<lname>)
匹配的内容,这不是你想要的,因为这是为了覆盖r1
根本不匹配的情况。(?P<lname>)
,这样无论哪种正则表达式适用(r1
或r2
),您都可以定义该命名组。然而re
不支持此功能。好消息是,更丰富的regex
包 * 支持它。然后我们得到: