Убираем конкретные символы из строки
Воспользуемся ' str.replace '
С поомщью str.replace мы можем менять какие-то символы на другие. Если мы просто хотим убрать какие-то символы, тогда просто заменяем их на пустую строку. str.replace() будет применять замену ко всем найденным совподениям.
s="Hello$ Python3$" s1=s.replace("$", "") print (s1) # Результат: Hello Python3
Если мы можем указать ограничение для количества совпадений, чтобы не убирать все символы.
s="Hello$ Python3$" s1=s.replace("$", "", 1) print (s1) # Результат: Hello Python3$
С помощью ' re.sub '
re. sub (pattern, repl, string, count=0, flags=0)
Возвращает строку, полученную путем замены крайних левых неперекрывающихся
совпадений с шаблоном в строке на значение repl. Если совпадения с шаблоном
не найдены, возвращается неизмененная строка
— Из документации Python'а
Если мы хотим убрать символы, то просто заменяем совпадения на пустую строку.
s="Hello$@& Python3$" import re s1=re.sub("[$|@|&]","",s) print (s1) # Результат: Hello Python3
s1=re.sub(“[$|@|&]”,””,s)
- Заменяемый шаблон → “[ $ | @ | & ]”
- [ ] используется для определения множества
- $ | @ | & → будет искать $ или @ или &
- Заменяем на пустую строку
- Если вышеуказанные символы заменяются найдены, то они заменяются на пустую строку
Убрать все символы, кроме букв
С помощью 'isalpha()'
isalpha() используется для того, чтобы проверять, состоит ли строка только из букв. Возвращает True если является буквой. Мы будем проходить по каждому символу строки и проверять является ли он буквой.
Пример
s="Hello$@ Python3&" s1="".join(c for c in s if c.isalpha()) print (s1) # Результат: HelloPython
s=”Hello$@ Python3&”
(c for c in s if c.isalpha())
Результат → [‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]
Перед нами объект генератор, содержащий все буквы из строки:
s1=””.join(c for c in s if c.isalpha())
””.join будет соединять все символы в одну строку.
С помощью 'filter()'
s = "Hello$@ Python3&" f = filter(str.isalpha, s) s1 = "".join(f) print(s1)
f = filter(str.isalpha, s)
Функция filter() будет применять str.isalpha метод для каждого элемента строки, и если получаем истину , то мы возвращаем элемент. В противном случае - пропускаем.
s1 = ””.join(f)
Функция filter() вернет итератор, содержащий все буквы переданной строки, а join() будем "склеиват" все элементы друг с другом.
С помощью 're.sub()'
s = "Hello$@ Python3$" import re s1 = re.sub("[^A-Za-z]", "", s) print (s1) # Результат: HelloPython
Рассмотрим s1 = re.sub(“[^A-Za-z]”, ””, s)
- “[ A-Za-z]”* → Ищет все символы, кроме букв. Если в начале множества указать * , тогда к шаблону будут подходить все те символы, которые НЕ указаны в множестве. (для русских слов используйте [^А-Яа-я] - прим. ред.)
- Все символы, удовлетворяющие шаблону будут заменены на пустую строку.
- Все символы, кроме букв, будут убраны.
Убрать все символы, кроме букв и чисел
С помощью 'isalnum()'
isalnum() используется, когда мы хотим определить состоит строка только из чисел или букв.
Пройдемся по каждому символу строки, что-бы выявить нужные символы.
s = "Hello$@ Python3&" s1 = "".join(c for c in s if c.isalnum()) print(s1) # Результат: HelloPython3
С помощью 're.sub()'
s = "Hello$@ Python3&_" import re s1 = re.sub("[^A-Za-z0-9]", "", s) print(s1) # Результат: HelloPython3
Рассмотрим s1=re.sub(“[^A-Za-z0–9]”,””,s)
- “[^A-Za-z0–9]” → Этот шаблон будет искать все символы, кроме букв и цифр.
- Все найденные символы будут заменены на пустую строку
- Все символы, кроме букв и цифры убраны.
Убрать все числа из строки, с помощью регулярных выражений
С помощью 're.sub()'
s = "Hello347 Python3$" import re s1 = re.sub("[0-9]", "", s) print(s1) # Результат: Hello Python$
Рассмотрим s1=re.sub(“[0–9]”,””,s)
- [0-9] - цифры от 0 до 9
- re.sub(“[0–9]”, ””, s) - если есть совпадения, заменяем на пустую строку
Убираем все символы из строки кроме цифр
С помощью 'isdecimal()'
isdecimal() возвращает истину, если все символы строки являются цифрами, в противном случае возвращается ложь.
s = "1-2$3%4 5a" s1 = "".join(c for c in s if c.isdecimal()) print(s1) # Результат: 12345
Пороходим по каждому символу строки и проверяем и является ли он цифрой. "".join() соединяет все элементы.
С помощью 're.sub()'
s = "1-2$3%4 5a" import re s1 = re.sub("[^0-9]", "", s) print(s1) # Результат: 12345
Рассмотрим s1 = re.sub(“[^0–9]”, ””, s)
- [^0-9] будет искать все символы кроме от 0 до 9
- re.sub(“[^0–9]”, ””, s) все символы кроме цифр будут заменены на пустую строку.
С помощью 'filter()'
s = "1-2$3%4 5a" f = filter(str.isdecimal, s) s1 = "".join(f) print(s1) # Результат: 12345
Рассмотрим f = filter(str.isdecimal, s)
Функция filter() будет выполнять str.isdecimal метод для каждого символа, если он возвращает истину, то добовляет его в генератор. Затем генератор распаковывается в готовую строку с помощью метода join() .
Примечание
Строки в Python являются неизменяемыми объектами, поэтому все вышеуказаные методы убирает символы из данной строки и возвращает новую, они не меняют состояние оригинальной строки.
Я конечно понимаю, что это статья с Медиума, но всё равно - очень не хватает сравнения скорости выполнения замен.
Опечатка в заголовке статьи - 5 СОпсобов
помогло, спасибо