---
05 жовтня 2020 р. 18:11

5 Способів прибрати непотрібні символи з рядка на Python

Забираємо конкретні символи з рядка


Скористайтеся ' 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 є незмінними об'єктами, тому всі вищезазначені методи прибирає символи з цього рядка і повертає новий, вони не змінюють стан оригінального рядка.

По статті запитували0питання

4

Вам це подобається? Поділіться в соціальних мережах!

D
  • 25 жовтня 2021 р. 10:45

Я конечно понимаю, что это статья с Медиума, но всё равно - очень не хватает сравнения скорости выполнения замен.

D
  • 25 жовтня 2021 р. 10:45

Опечатка в заголовке статьи - 5 СОпсобов

KR
  • 28 березня 2022 р. 17:14

помогло, спасибо

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up