我有遍历字符串列表的代码,然后遍历该字符串在另一个字符串中的每次出现的代码。在到达以问号(?I)开头的字符串之前,这似乎一直有效。
这是代码。
dtID = 0
for datum in sorted(datumList, key=operator.attrgetter('Sum'), reverse = True):
datum.ID = dtID
for foundDatum in re.finditer(datum.Name, text):
datumLocList.append(DatumLoc(dtID,foundDatum.start()))
dtID += 1
我该如何解决?
Traceback (most recent call last):
File "C:\Users\trist\Documents\Python\The Compressor\The Compressor.py", line 97, in <module>
compress()
File "C:\Users\trist\Documents\Python\The Compressor\The Compressor.py", line 73, in compress
for foundDatum in re.finditer(datum.Name, text):
File "C:\Program Files\Python37\lib\re.py", line 230, in finditer
return _compile(pattern, flags).finditer(string)
File "C:\Program Files\Python37\lib\re.py", line 286, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Program Files\Python37\lib\sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "C:\Program Files\Python37\lib\sre_parse.py", line 930, in parse
p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
File "C:\Program Files\Python37\lib\sre_parse.py", line 426, in _parse_sub
not nested and not items))
File "C:\Program Files\Python37\lib\sre_parse.py", line 651, in _parse
source.tell() - here + len(this))
re.error: nothing to repeat at position 0
答案 0 :(得分:2)
您的包含问号的模式字符串被视为正则表达式特殊字符。 ?符号尝试匹配前面的正则表达式的0或1个重复。由于在你的字符串?是第一个字符,它正尝试匹配前面的正则表达式的0或1个重复,这没什么:因此,您的“什么都不会在位置0重复”错误。
为避免这种情况,您可以使用re.escape()
方法,该方法将转义模式字符串中的所有RE特殊字符。
for foundDatum in re.finditer(re.escape(datum.Name), text):
datumLocList.append(DatumLoc(dtID,foundDatum.start()))