当前位置:  开发笔记 > 编程语言 > 正文

正则表达式问题组名称重新定义?

如何解决《正则表达式问题组名称重新定义?》经验,为你挑选了2个好方法。

所以我有这个正则表达式:

(^(\s+)?(?P(\w)(\d{7}))((01f\.foo)|(\.bar|\.goo\.moo\.roo))$|(^(\s+)?(?PR1_\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

如果我不能在同一个正则表达式中为两个不同的情况定义同一组两次,我该怎么办?



1> Tomalak..:

不,你不能有两个同名的团体,这会以某种方式违抗目的,不是吗?

真正想要的是这个:

^\s*(?P\w\d{7}|R1_(?:\d{6}_){2})(01f\.foo|\.(?:bar|goo|moo|roo))$

我尽可能地重构你的正则表达式.我做了以下假设:

你想(如果我错了,请纠正我):

忽略字符串开头的空格

将以下任一项匹配到名为"NAME"的组中:

一个字母后跟7位数字,或

"R1_",两次(6位+ "_")

其次是:

"01f.foo" 要么

"."和("bar""goo""moo""roo")

然后是字符串的结尾


你也可能意味着:

^\s*(?P\w\d{7}01f|R1_(?:\d{6}_){2})\.(?:foo|bar|goo|moo|roo)$

这是:

忽略字符串开头的空格

将以下任一项匹配到名为"NAME"的组中:

一个字母后跟7位数字和"01f"

"R1_",两次(6位+ "_")

一个点

"foo","bar","goo","moo"或者"roo"

字符串的结尾


具有相同名称的多个命名捕获组是非常有用的功能.Python不支持它,但.NET支持它.

2> Max..:

与Tamalak的回复相反,在您的情况下重复使用相同的名称是有道理的.

你的正则表达式用python2.7和re2编译.也许这个问题已经解决了.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有