我有一个文本文件,其中包含一个真正的英文俚语单词和他们的替代品列表。我将这个文本文件转换成一个使用“:”作为分割点的字典,并且在转换后打印字典时,一切似乎都没问题。错误:没有重复的位置
但是,源自此行的错误:slangs_re = re.compile('|'.join(slang_dict.keys()))
表示nothing to repeat at position 112207
。
在尝试调试时,我发现错误以某种方式链接到字典。这是因为当我在下面运行代码时,我没有得到正确的输出,但是我也没有得到一个错误。该代码的预期输出是“适应性”,但实际输出是“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)。预期的输出是“健身”,但实际的输出是一个错误:
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线程,我才知道,这是在某些情况下的错误,但它似乎并没有成为一个在这个案例。
谢谢
如果'slang_dict.keys()'包含正则表达式元字符('*','+'等),它们需要被转义。 – Tushar
最有可能的是,你可以用'r'(?<!\ w){}(?!\ w)“来修复它。format('|'.join([re.escape(x)for slang_dict.keys ()]))'。或者,如果所有单词都由字母,数字和'_'组成,您甚至可以使用'\ w +'模式并在尝试获取值之前检查密钥是否存在于字典中。 –
此外,'contractions_re'应该替换为'slangs_re'。见https://ideone.com/VVR3ke –