python正则表达式:命名组中的名称重复
有没有一种方法可以在python中的正则表达式命名组中使用相同的名称? e、 g.python正则表达式:命名组中的名称重复,python,regex,regex-lookarounds,regex-group,Python,Regex,Regex Lookarounds,Regex Group,有没有一种方法可以在python中的正则表达式命名组中使用相同的名称? e、 g.(?Pfoo)|(?Pbar) 用例: 我试图用这个正则表达式捕获类型和id: /(?=videos)((?Pvideos)/(?P\d+)|(?P\w+/?(?Pv)?/?(?P\d+) 从以下字符串: /频道/v/123 /ch/v/41500082 /渠道 /视频/41500082 现在我得到了一个错误: 将组名“id”重新定义为组6;was group 3答案是:Pythonre不支持同名组 Pytho
(?Pfoo)|(?Pbar)
用例:
我试图用这个正则表达式捕获类型
和id
:/(?=videos)((?Pvideos)/(?P\d+)|(?P\w+/?(?Pv)?/?(?P\d+)
从以下字符串:
- /频道/v/123
- /ch/v/41500082
- /渠道
- /视频/41500082
将组名“id”重新定义为组6;was group 3
答案是:Pythonre
不支持同名组
Python支持分支重置功能:
分支复位
(?|…|…)
捕获组编号将在备选方案中重复使用,但具有不同名称的组将具有不同的组编号。示例:
regex.match(r“(?|(第一)|(第二)),“第一”).groups()
('first',)
regex.match(r“(?|(第一)|(第二)),“第二”).groups()
('second',)
请注意,只有一个组 这是一个现场直播:
导入正则表达式
s=“foo-bar”
rx=regex.compile(r“(?Pfoo)|(?Pbar)”)
打印([x.group(“n”)代表rx.FindItemer中的x)])
//=>['foo','bar']
除非您使用的是仅由较新的regex
模块支持的分支重置,否则命名的捕获组是唯一的:(?|…)
-您是否有在线演示您试图实现的目标?此外,有条件的正则表达式或lookarounds很可能就足够了。
import regex
s = "foo bar"
rx = regex.compile(r"(?P<n>foo)|(?P<n>bar)")
print([x.group("n") for x in rx.finditer(s)])
// => ['foo', 'bar']