所以我有了这个正则表达式:
(^(\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
如果我不能在同一个regex表达式中为两个不同的情况定义同一个组两次,我该怎么办?
不,你不能有两个同名的组,这会有点违背目的,不是吗?
你可能真正想要的是:
我尽可能重构了你的regex。我做了以下假设:
你想(如果我错了就纠正我):
"R1_"
,两次(6位数+"_"
)"01f.foo"
或"."
和("bar"
或"goo"
或"moo"
或"roo"
)你也可以说:
即:
"R1_"
,两次(6位数+"_"
)"foo"
、"bar"
、"goo"
、"moo"
或"roo"
下面的答案涉及如何使上述regex在Python3中工作。
因为Max建议的re2模块在Python3中不起作用,因为
NameError: basestring
。另一个替代方案是regex
模块。regex
模块只是re
的增强版本,具有额外的功能。这个 模块还允许在regex中使用相同的组名。您可以通过以下方式安装:
如果你已经在程序中使用了
re
或re2
。只需执行以下操作导入regex
模块重复使用同一个名字在你的情况下是有意义的,与塔玛拉克的回答相反。
您的regex使用python2.7和re2编译。也许这个问题已经解决了。
相关问题 更多 >
编程相关推荐