gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:27:07 25 4
gpt4 key购买 nike

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

(^(\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 expressionsre_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))$

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

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

  • 忽略字符串开头的空格
  • 将以下任一匹配到名为“NAME”的组中:
    • 一个字母后跟 7 位数字,或者
    • “R1_”,以及两次(6 位数字 + “_”)
  • 后跟:
    • “01f.foo”
    • "." 和 ("bar""goo""moo"“roo”)
  • 后跟字符串的结尾

你也可以指:

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

这是:

  • 忽略字符串开头的空格
  • 将以下任一匹配到名为“NAME”的组中:
    • 一个字母后跟 7 位数字和“01f”
    • “R1_”,以及两次(6 位数字 + “_”)
  • 一个点
  • “foo”“bar”“goo”“moo” “roo”
  • 字符串结束

关于python - 正则表达式问题组名称重新定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com