所以我有这个正则表达式:
(^(\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))$))
现在,如果我尝试对此进行匹配:
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
如果我无法在同一正则表达式中为两种不同的情况定义同一组两次,我该怎么办?
不,你不能有两个同名的组,这会在某种程度上违背目的,不是吗?
你可能会做什么really想要的是这样的:
^\s*(?P<NAME>\w\d{7}|R1_(?:\d{6}_){2})(01f\.foo|\.(?:bar|goo|moo|roo))$
我尽可能重构了你的正则表达式。我做了以下假设:
你想要(如果我错了请纠正我):
- 忽略字符串开头的空格
- match either of the following into a group named "NAME":
- 一个字母后跟 7 位数字,或者
-
"R1_"
,和两次(6位+"_"
)
- followed by either:
-
"01f.foo"
or
-
"."
and ("bar"
or "goo"
or "moo"
or "roo"
)
- 接下来是字符串的末尾
你的意思也可能是:
^\s*(?P<NAME>\w\d{7}01f|R1_(?:\d{6}_){2})\.(?:foo|bar|goo|moo|roo)$
这是:
- 忽略字符串开头的空格
- match either of the following into a group named "NAME":
- 一个字母后跟 7 位数字和“01f”
-
"R1_"
,和两次(6位+"_"
)
- a dot
-
"foo"
, "bar"
, "goo"
, "moo"
or "roo"
- 字符串的末尾
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)