所以我有这个正则表达式:
(^(\s+)?(?P<NAME>(\w)(\d{7}))((01f\.foo)|(\.bar|\.goo\.moo\.roo))$|(^(\s+)?(?P<NAME2>R1_\d{6}_\d{6}_)((01f\.foo)|(\.bar|\.goo\.moo\.roo))$))
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试对此进行匹配:
B048661501f.foo
我收到此错误:
File "C:\Python25\lib\re.py", line 188, in compile
return _compile(pattern, flags)
File "C:\Python25\lib\re.py", line 241, in _compile
raise error, v # invalid expression
sre_constants.error: redefinition of group name 'NAME' as group 9; was group 3
如果我不能在同一个正则表达式中为两个不同的情况定义同一组两次,我该怎么办?
不,你不能有两个同名的团体,这会以某种方式违抗目的,不是吗?
你真正想要的是这个:
^\s*(?P<NAME>\w\d{7}|R1_(?:\d{6}_){2})(01f\.foo|\.(?:bar|goo|moo|roo))$
Run Code Online (Sandbox Code Playgroud)
我尽可能地重构你的正则表达式.我做了以下假设:
你想(如果我错了,请纠正我):
"R1_",两次(6位+ "_")"01f.foo" 要么"."和("bar"或"goo"或"moo"或"roo")你也可能意味着:
^\s*(?P<NAME>\w\d{7}01f|R1_(?:\d{6}_){2})\.(?:foo|bar|goo|moo|roo)$
Run Code Online (Sandbox Code Playgroud)
这是:
"R1_",两次(6位+ "_")"foo","bar","goo","moo"或者"roo"