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

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

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

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

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

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

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

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

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
г
  • ги
  • 24 квітня 2024 р. 01:51

C++ - Тест 005. Структуры и Классы

  • Результат:41бали,
  • Рейтинг балів-8
l
  • laei
  • 23 квітня 2024 р. 19:19

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10бали,
  • Рейтинг балів-10
l
  • laei
  • 23 квітня 2024 р. 19:17

C++ - Тест 003. Условия и циклы

  • Результат:50бали,
  • Рейтинг балів-4
Останні коментарі
k
kmssr09 лютого 2024 р. 05:43
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко05 лютого 2024 р. 12:50
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 грудня 2023 р. 21:30
Boost - статичне зв&#39;язування в проекті CMake під Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 грудня 2023 р. 19:38
Boost - статичне зв&#39;язування в проекті CMake під Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 грудня 2023 р. 08:01
Qt/C++ - Урок 056. Підключення бібліотеки Boost в Qt для компіляторів MinGW і MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Тепер обговоріть на форумі
G
Gar22 квітня 2024 р. 15:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 квітня 2024 р. 17:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 квітня 2024 р. 16:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 квітня 2024 р. 12:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex04 квітня 2024 р. 14:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Слідкуйте за нами в соціальних мережах