2013-05-26 22 views
1

У меня есть строка с кучей символов, отличных от ASCII, и я хотел бы удалить ее. Я использовал следующую функцию в Python 3:Удаление строк, содержащих ASCII

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

Можно ли получить пробелы между строкой, так что он является :

Привет! Меня зовут Голубые

+0

[ 'Защита removeNonAscii (s): возвращение "" .join (фильтр (лямбда-х: ог (х) <128, s)) '] (http://stackoverflow.com/questions/1342000/how-to-replace-non-ascii-characters-in-string) и [здесь] (http://stackoverflow.com/questions/8689795/python -remove-non-ascii-characters-but-leave-period-and-spaces) является еще одним полезным Q & A –

+0

@GrijeshChauhan: Это тот же самый фрагмент кода, который имеет OP! – nhahtdh

+0

@GrijeshChauhan это то, что я использовал, но у меня есть такая же проблема, как упоминалось выше – lost9123193

ответ

3

Код ниже эквивалентен текущему код, за исключением того, что для непрерывной последовательности символов вне диапазона US-ASCII, он заменит всю последовательность с одним пробелом (ASCII 32) ,

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

Обратите внимание, что управляющие символы разрешены приведенным выше кодом, а также код в вопросе.

+0

Просто то, что я хотел! Большое спасибо! – lost9123193

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 ' 
Смежные вопросы