我需要用空格替换所有非 ASCII (\x00-\x7F) 字符。我很惊讶这在 Python 中并不容易,除非我遗漏了一些东西。以下函数只是删除所有非 ASCII 字符:
def remove_non_ascii_1(text): return ''.join(i for i in text if ord(i)<128)
并且这个根据字符代码点中的字节数用空格数替换非ASCII字符(即,将鈥�字符替换为3个空格):
鈥�
def remove_non_ascii_2(text): return re.sub(r'[^\x00-\x7F]',' ', text)
您的''.join()表达式正在 过滤 ,删除任何非 ASCII 内容;您可以改用条件表达式:
''.join()
return ''.join([i if ord(i) < 128 else ' ' for i in text])
这将逐个处理字符,并且每个替换的字符仍将使用一个空格。
您的正则表达式应该只用空格替换 连续 的非 ASCII 字符:
re.sub(r'[^\x00-\x7F]+',' ', text)
注意+那里。
+