Забираємо конкретні символи з рядка
Скористайтеся ' 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 (шаблон, відповідь, рядок, кількість=0, прапори=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=”Привіт$@ Python3&”
(c для c in s, якщо c.isalpha())
Результат → * ['H', 'e', 'l', 'l', 'o', 'P', 'y', 't', 'h', 'o', 'n'] *
Перед нами об'єкт генератор, що містить усі літери з рядка:
s1=””.join(c for c in s, якщо c.isalpha())
””.join з'єднуватиме всі символи в один рядок.
За допомогою 'filter()'
s = "Hello$@ Python3&" f = filter(str.isalpha, s) s1 = "".join(f) print(s1)
f = фільтр(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 СОпсобов
помогло, спасибо