Как удалить специальные символы из строк в python?

У меня есть миллионы строк, извлеченных из Интернета, например:

s = 'WHAT\xe2\x80\x99S UP DOC?'
type(s) == str # returns True

Специальные символы, подобные приведенной выше строке, неизбежны при извлечении данных из Интернета. Как удалить все такие специальные символы, чтобы сохранить только чистый текст? Я думаю о регулярном выражении, подобном этому, на основе моего очень ограниченного опыта работы с символами Юникода:

\\x.*[0-9]

person pg2455    schedule 18.08.2015    source источник
comment
Это не специальные символы, это строка в кодировке utf-8, которая при печати выводит WHAT’S UP DOC?   -  person Padraic Cunningham    schedule 18.08.2015
comment
stackoverflow .com/questions/5843518/   -  person comalex3    schedule 18.08.2015
comment
@PadraicCunningham: Спасибо, что поправили меня. Я имел в виду то же самое.   -  person pg2455    schedule 18.08.2015
comment
Итак, вы хотите, чтобы все не-ascii были удалены? то есть print(s.decode("ascii",errors="ignore"))   -  person Padraic Cunningham    schedule 18.08.2015
comment
Работает как масло. Спасибо!!   -  person pg2455    schedule 18.08.2015
comment
Вы хотите упомянуть это решение или я должен записать его в своем ответе?   -  person pg2455    schedule 18.08.2015
comment
@mousecoder, работай дальше   -  person Padraic Cunningham    schedule 18.08.2015


Ответы (2)


Специальные символы на самом деле не состоят из нескольких символов, именно так они представлены, поэтому ваше регулярное выражение не будет работать. Если вы print, вы увидите фактические символы Unicode (utf-8)

>>> s = 'WHAT\xe2\x80\x99S UP DOC?'
>>> print(s)
WHATâS UP DOC?
>>> repr(s)
"'WHATâ\\x80\\x99S UP DOC?'"

Если вы хотите печатать только символы ascii, вы можете проверить, находится ли символ в string.printable

>>> import string
>>> ''.join(i for i in s if i in string.printable)
'WHATS UP DOC?'
person Cory Kramer    schedule 18.08.2015

Эта вещь сработала для меня, как упоминал Падриак в комментариях:

s.decode('ascii', errors='ignore')
person pg2455    schedule 18.08.2015