Строка содержит различные символы, нужно удалить все, оставив лишь буквы и пробелы.
Как я понимаю, нужно действовать через регулярные выражения, но как конкретно — мне непонятно.
Имеется метод str.translate(), который удаляет все символы из строки, содержащиеся в некотором наборе. regexp тут не нужны скорее всего.
При помощи regexp можно так:
import re s = 'Hello!@#!%!#&&!*!#$#%@*+_{ world!' reg = re.compile('[^a-zA-Z ]') print(reg.sub('', s))
Можно replace использовать. Более человеко-понимаемо чем всякие regexp
>>> i = 'abcdefg' >>> i.replace('cde','') 'abfg'
Конечно это может быть утомительно и выглядеть слишком громоздко, но куда понятнее, чем regexp — который являет собой ни что иное, как рудимент трудно-читаемого программирования прошлого. Вы ещё перфокарты возьмите и попротыкайте…
>>> i = 'a$%b@.c&d*!@e$f%g' >>> i.replace('%','').replace('$','').replace('@','').replace('*','').replace('.','').replace('!','').replace('&','') 'abcdefg'
Если хочется оставить только ascii буквы и соответствующие стандартные символы пробела, то bytes.translate()
является наиболее эффективным методом:
#!/usr/bin/env python3 from string import ascii_letters, whitespace good_chars = (ascii_letters + whitespace).encode() junk_chars = bytearray(set(range(0x100)) - set(good_chars)) def clean(text): return text.encode('ascii', 'ignore').translate(None, junk_chars).decode() print(clean('Hello1@#!%!#&&!*!#$#%@*+_{ world!')) # -> Hello world
Если необходимо сохранить произвольные буквы и символы пробела, то можно использовать регулярные выражения:
>>> import regex as re # $ pip install regex >>> print(re.sub(r'[^\w\s]', '', 'Hello1@#!%!#&&!*!#$#%@*+_{\u00A0ёж!')) Hello1_ ёж >>> print(re.sub(r'[^\pL\p{Space}]', '', 'Hello1@#!%!#&&!*!#$#%@*+_{\u00A0ёж!')) Hello еж
Стандартный re
модуль не поддерживает \p{}
Юникодные свойства, поэтому необходимо использовать regex
модуль. Различные классы символов такие как \w
, \pL
могут порождать слегка отличные результаты (см. ёж
vs. еж
в примере). Можно также использовать Юникодные свойства напрямую: unicodedata
+ unicode.translate()
.