gpt4 book ai didi

python - 正则表达式重定义错误

转载 作者:行者123 更新时间:2023-11-28 22:07:17 25 4
gpt4 key购买 nike

我正在使用 python,遇到了一些重定义错误,我知道它们是重定义,但从逻辑上讲它不可能达到它,因为它是一个或。有办法解决这个问题吗?感谢您提前提供帮助

/python-2.5/lib/python2.5/re.py”,第 233 行,在 _compile 中 引发错误,v # 无效表达式sre_constants.error: 将组名 'id' 重新定义为组 9;是第 6 组


import re

DOB_RE = "(^|;)DOB +(?P<dob>\d{2}-\d{2}-\d{4})"
ID_RE = "(^|;)ID +(?P<id>[A-Z0-9]{12})"
INFO_RE = "- (?P<info>.*)"

PERSON_RE = "((" + DOB_RE + ".*" + ID_RE + ")|(" + \
ID_RE + ".*" + DOB_RE + ")|(" + \
DOB_RE + "|" + ID_RE + ")).*(" + INFO_RE + ")*"

PARSER = re.compile(PERSON_RE)

samplestr1 = garbage;DOB 10-10-2010;more garbage\nID PARI12345678;more garbage
samplestr2 = garbage;ID PARI12345678;more garbage\nDOB 10-10-2010;more garbage
samplestr3 = garbage;DOB 10-10-2010
samplestr4 = garbage;ID PARI12345678;more garbage- I am cool

最佳答案

正则表达式语法根本不允许多次出现同名组——未“到达”的组在匹配中被定义为“空”(无)。

因此您必须更改这些名称,例如到 dob0dob1dob2id0id1id2 (然后您可以轻松地“折叠”这些键集,以便在您从匹配中获得组字典后制作您真正想要的字典)。

例如,使 DOB_RE 成为函数而不是常量,例如:

def DOB_RE(i): return "(^|;)DOB +(?P<dob%s>\d{2}-\d{2}-\d{4})" % i

对其他人也类似,将计算 PERSON_RE 的语句中出现的三个 DOB_RE 更改为 DOB_RE(0)DOB_RE(1) 等(其他类似)。

关于python - 正则表达式重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376049/

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