1

我有一个包含一堆非 ASCII 字符的字符串,我想删除它。我在 Python 3 中使用了以下函数:

def removeNonAscii(s): 
    return "".join(filter(lambda x: ord(x)<128, s))

str1 = "Hi there!\xc2\xa0My\xc2\xa0name\xc2\xa0is\xc2\xa0Blue "
new = removeNonAscii(str1)

新字符串变为:

你好!MynameisBlue

是否可以在字符串之间获取空格,例如:

你好呀!我的名字是蓝

4

2 回答 2

3

下面的代码等效于您当前的代码,除了对于 US-ASCII 范围之外的连续字符序列,它将用单个空格 (ASCII 32) 替换整个序列。

import re
re.sub(r'[^\x00-\x7f]+', " ", inputString)

请注意,上面的代码以及问题中的代码都允许使用控制字符。

于 2013-05-26T05:39:13.597 回答
0

正则表达式在这里获胜,但这里的 FWIW 是一个itertools.groupby解决方案:

from itertools import groupby
text = "Hi there!\xc2\xa0My\xc2\xa0name\xc2\xa0is\xc2\xa0Blue "
def valid(c):
    return ord(c) < 128

def removeNonAscii(s):
    return ''.join(''.join(g) if k else ' ' for k, g in groupby(s, valid))

>>> removeNonAscii(text)
'Hi there! My name is Blue '
于 2013-05-26T05:45:53.260 回答