一尘不染

Python-用单个空格替换非ASCII字符

python

我需要将所有非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)

阅读 527

收藏
2020-02-23

共1个答案

一尘不染

你的''.join()表达式正在过滤,删除任何非ASCII的内容;你可以改用条件表达式:

return ''.join([i if ord(i) < 128 else ' ' for i in text])

这将一个接一个地处理字符,每个替换字符仍将使用一个空格。

你的正则表达式应仅将连续的非ASCII字符替换为空格:

re.sub(r'[^\x00-\x7F]+',' ', text)

注意+那里。

2020-02-23