是否可以在 python 中命名非捕获组?例如,我想匹配此模式中的字符串(包括引号):
"a=b" '鸟=天使'
我可以执行以下操作:
s = '"bird=angel"'
myre = re.compile(r'(?P<quote>[\'"])(\w+)=(\w+)(?P=quote)')
m = myre.search(s)
m.groups()
# ('"', 'bird', 'angel')
结果捕获了报价组,这在此处是不可取的。
不,命名组总是捕获组。从re
模块的文档中:
扩展通常不会创建新组;
(?P<name>...)
是这条规则的唯一例外。
关于命名组扩展:
与正则括号类似,但组匹配的子字符串可在正则表达式的其余部分通过符号组名 name 访问
哪里的regular parentheses
意思(...)
,对比(?:...)
。
您确实需要一个捕获组才能匹配相同的引号:没有其他机制re
允许您这样做,除非明确区分两个引号:
myre = re.compile('"{0}"' "|'{0}'" .format('(\w+)=(\w+)'))
(它的缺点是给你四个组,每种引用两个组)。
请注意,不需要为引号命名,但是:
myre = re.compile(r'([\'"])(\w+)=(\w+)\1')
也可以。
总之,groups()[1:]
如果可能的话,你最好使用它来获得你需要的东西。