Удаление нежелательных символов из строки в Python

Программисты часто сталкиваются с задачей удаления какого-нибудь символа из строки. Но иногда бывает нужно удалить не один символ, а целый список нежелательных символов. Например, специальных символов — для восстановления валидных паролей. Есть и другие ситуации, когда это может понадобиться. Давайте рассмотрим, каким образом можно решить такую задачу.

Метод 1: использование replace()

Можно использовать replace() внутри цикла для выявления bad_char («плохого» символа) и замены его на пустую строку (т. е., по сути, удаления). Это самый базовый и неэффективный с точки зрения производительности подход.

# Python3 code to demonstrate 
# removal of bad_chars 
# using replace() 

# initializing bad_chars_list 
bad_chars = [';', ':', '!', "*", " "] 

# initializing test string 
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"

# printing original string 
print("Original String : " + test_string) 

# using replace() to 
# remove bad_chars 
for i in bad_chars : 
    test_string = test_string.replace(i, '') 

# printing resultant string 
print("Resultant list is : " + test_string) 

Результат:

Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s!
Resultant list is : GeeksforGeeks

Метод 2: использование join() и генератора

При помощи join() мы переделываем строку. В функции генератора мы прописываем логику игнорирования определенных символов (входящих в bad_chars), в результате новая строка формируется без них.

# Python3 code to demonstrate 
# removal of bad_chars 
# using join() + generator 

# initializing bad_chars_list 
bad_chars = [';', ':', '!', "*", " "] 

# initializing test string 
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"

# printing original string 
print("Original String : " + test_string) 

# using join() + generator to 
# remove bad_chars 
test_string = ''.join(i for i in test_string if not i in bad_chars) 

# printing resultant string 
print("Resultant list is : " + test_string) 

Результат:

Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s!
Resultant list is : GeeksforGeeks

Метод 3: использование filter()

Еще один вариант решения этой задачи. Функция filter при использовании lambda-функции может удалить все bad_chars и вернуть строку в желанном для нас виде.

# Python3 code to demonstrate 
# removal of bad_chars 
# using filter() 

# initializing bad_chars_list 
bad_chars = [';', ':', '!', "*", " "] 

# initializing test string 
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"

# printing original string 
print("Original String : " + test_string) 

# using filter() to 
# remove bad_chars 
test_string = filter(lambda i: i not in bad_chars, test_string) 

test_string = "".join(test_string)

# printing resultant string 
print("Resultant list is : " + test_string) 

Результат:

Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s!
Resultant list is : GeeksforGeeks