Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式:命名组中的名称重复_Python_Regex_Regex Lookarounds_Regex Group - Fatal编程技术网

python正则表达式:命名组中的名称重复

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

有没有一种方法可以在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

答案是:Python
re
不支持同名组

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']