我需要用空格替换所有非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)
How can I replace all non-ASCII characters with a single space?
Of the myriad of similar SO questions,none address character replacement as opposed to stripping,and另外解决所有非ascii字符而非特定字符 .
6 回答
您的
''.join()
表达式正在过滤,删除任何非ASCII值;您可以使用条件表达式:这将逐个处理字符,并且每个字符仍然会替换一个空格 .
您的正则表达式应该只用空格替换连续的非ASCII字符:
注意
+
那里 .对于你来说,获得最相似的原始字符串表示我推荐the unidecode module:
然后你可以在字符串中使用它:
对于字符处理,请使用Unicode字符串:
但请注意,如果您的字符串包含已分解的Unicode字符(例如,单独的字符和组合重音符号),您仍会遇到问题:
如果替换字符可以是'?'而不是空格,那么我建议
result = text.encode('ascii', 'replace').decode()
:结果:
这个如何?
作为一种原生且高效的方法,您不需要在字符上使用
ord
或任何循环 . 只需使用ascii
进行编码并忽略错误 .以下将删除非ascii字符:
现在,如果要替换已删除的字符,请执行以下操作: