gpt4 book ai didi

python - 错误: nothing to repeat at position

转载 作者:行者123 更新时间:2023-12-01 02:37:49 25 4
gpt4 key购买 nike

我有一个文本文件,其中包含俚语及其在真正英语中的替代词的列表。我使用“:”作为分割点将此文本文件转换为字典,并且在转换后打印字典时一切似乎都正常。

但是,源自此行的错误:slangs_re = re.compile('|'.join(slang_dict.keys()))nothing to repeat at position 112207 .

在尝试调试时,我发现该错误以某种方式与字典相关联。这是因为当我运行下面的代码时,我没有得到正确的输出,但也没有得到错误。此代码的预期输出是“fitness”,但实际输出是“fitess”。

import re

test = "fitess"

slang_dict = {"fitess":"fitness", "damm":"damn"}

slangs_re = re.compile('|'.join(slang_dict.keys()))

def correct_slang(s, slang_dict=slang_dict):
def replace(match):
return slang_dict[match.group(0)]

return slangs_re.sub(replace, s)

test = correct_slang(test)
print(test)

这是带有字典的代码(抱歉,文本文件太大,无法包含在内。示例可用 here )。预期输出是“fitness”,但实际输出是错误:

import re

test = "fitess"

file = open("slang_conversion.txt","r")

slang_dict = {}

for line in file:
x = line.split(":")
a = x[0]
b = x[1]
c = len(b) - 1

b = b[0:c]

slang_dict[a] = b

slangs_re = re.compile('|'.join(slang_dict.keys())) # <-- error

def correct_slang(s, slang_dict=slang_dict):
def replace(match):
return slang_dict[match.group(0)]

return slangs_re.sub(replace, s)

test = correct_slang(test)

print(test)

在阅读其他 SO 线程后,我发现在某些情况下这是一个错误,但在这种情况下似乎不是一个错误。

谢谢

最佳答案

我建议更换

slangs_re = re.compile('|'.join(slang_dict.keys()))

slangs_re = re.compile(r"(?<!\w)(?:{})(?!\w)".format('|'.join([re.escape(x) for x in slang_dict])))

并确保传递按长度降序排列的键。

from collections import OrderedDict
import re

test = "fitess no kome*"

slang_dict = {"Aha aha":"no", "fitess":"fitness", "damm":"damn", "kome*":"come", "ow wow":"rrf"}
slang_dict = OrderedDict(sorted(slang_dict.iteritems(), key=lambda x: len(x[0]), reverse=True))

slangs_re = re.compile(r"(?<!\w)(?:{})(?!\w)".format('|'.join([re.escape(x) for x in slang_dict])))
def correct_slang(s, slang_dict=slang_dict):
def replace(match):
return slang_dict[match.group(0)]

return slangs_re.sub(replace, s)

test = correct_slang(test)
print(test)

请参阅Python demo

这会将术语作为整个单词进行检查,并转义每个搜索短语中的特殊字符,以便将它们传递到正则表达式引擎时不会出现问题。

如果您对全字匹配不感兴趣,请删除 (?<!\w) (检查前导字边界)和 (?!\w) (检查尾随字边界)。

关于python - 错误: nothing to repeat at position,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036882/

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