Убираем конкретные символы из строки

С поомщью 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
- Заменяемый шаблон → “[ $ | @ | & ]”
- [ ] используется для определения множества
- $ | @ | & → будет искать $ или @ или &
- Заменяем на пустую строку
- Если вышеуказанные символы заменяются найдены, то они заменяются на пустую строку
Убрать все символы, кроме букв
С помощью 'isalpha()'

isalpha() используется для того, чтобы проверять, состоит ли строка только из букв. Возвращает True если является буквой. Мы будем проходить по каждому символу строки и проверять является ли он буквой.
Пример
s="Hello$@ Python3&" s1="".join(c for c in s if c.isalpha()) print (s1) # Результат: HelloPython(c for c in s if c.isalpha())
Перед нами объект генератор, содержащий все буквы из строки:
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 метод для каждого элемента строки, и если получаем истину , то мы возвращаем элемент. В противном случае - пропускаем.
Функция 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
- “[^A-Za-z0–9]” → Этот шаблон будет искать все символы, кроме букв и цифр.
- Все найденные символы будут заменены на пустую строку
- Все символы, кроме букв и цифры убраны.
Убрать все числа из строки, с помощью регулярных выражений
С помощью 're.sub()'

s = "Hello347 Python3$" import re s1 = re.sub("[0-9]", "", s) print(s1) # Результат: Hello Python$
- [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
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
По статье задано0 вопрос(ов)
Подписка на обсуждение 4
Подписка на раздел 73Вам это нравится? Поделитесь в социальных сетях!
Удаление определенных символов из строки в Python
Одной из распространенных задач, которые возникают при работе со строками в Python, является необходимость удалить определенные символы из строки. Например, может потребоваться удалить все знаки препинания из текста. Предположим, дана следующая строка:
text = "Привет, мир! Как твои дела?"Требуется удалить все знаки препинания, то есть символы , , ! и ? .
Решение задачи
Python предоставляет несколько способов для решения этой задачи. Один из наиболее простых и эффективных способов — использование метода replace() .
Метод replace() в Python принимает два аргумента: символ (или подстроку), который нужно заменить, и символ (или подстроку), на который нужно заменить. Если второй аргумент — пустая строка, то первый аргумент просто удаляется из строки.
Важным моментом является то, что строки в Python являются неизменяемыми, поэтому метод replace() не изменяет исходную строку, а возвращает новую строку, в которой произведена замена.
Таким образом, можно пройтись циклом по каждому символу, который нужно удалить, и применить к строке метод replace() . В результате будет получена строка без этих символов.
symbols_to_remove = ". " for symbol in symbols_to_remove: text = text.replace(symbol, "")После выполнения данного кода в переменной text будет строка «Привет мир Как твои дела».
Таким образом, удаление определенных символов из строки в Python может быть легко выполнено с помощью метода replace() .
Удаление слова из строки Python по фрагменту или шаблону
Строка - это неизменяемый тип в Python, следовательно для каких то изменений, ее необходимо преобразовать в изменяемый тип, например в список. После необходимых изменений , преобразовать список снова в строку.
# исходная строка >>> line = 'остались строки и перенос слова перекресток переоборудование' # делим строку на слова >>> words = line.split(' ') # фрагмент, по которому будем удалять слова >>> fragment = 'пере' # новый список оставшихся слов >>> new_words = [] >>> for word in words: . if fragment not in word: . new_words.append(word) . >>> new_words # ['остались', 'строки', 'и', 'слова'] # собираем строку используя в качестве разделителя пробел >>> ' '.join(new_words) # 'остались строки и словаДля удаления или изменения строк по шаблону необходимо использовать регулярные выражения и функцию re.sub() . Например удалим все цифры из строки или оставим только цифры.
# исходная строка >>> line = '156 строк и 13 переносов слов в 10 предложениях' >>> import re # удаление цифр из строки >>> re.sub(r'\d+\s?', '', line).strip() # 'строк и переносов слов в предложениях' # удаление слов из строки >>> re.sub(r'[а-я]+\s?', '', line).strip() # '156 13 10'Удаление повторов слов в строке.
Для удаления повторов слов в строке так же необходимо воспользоваться регулярными выражениями и модулем re . В частности будем использовать группы с захватом и обратные ссылки регулярного выражения..
# исходная строка >>> line = 'Мама мыла мыла раму' >>> import re >>> re.sub(r'(\b\w+)\s+\1', r'\1', line) # 'Мама мыла раму'
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python "как есть"
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам
Удалить все цифры из строки
Мои мысли:
мне кажется, надо составить цикл с 0 до длины строки и, проверяя каждый символ на принадлежность к типу int, удалять его или оставлять. Я не знаю, как делать проверку принадлежности, прошу помочь.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 26 сен 2014 в 17:14
187 2 2 золотых знака 5 5 серебряных знаков 12 12 бронзовых знаков
Уточните, как поступить, если цифра не отделена от строки пробелом: '112 sad33d dfdf 21' или '112 sadd 22,3 dfdf 21'
26 сен 2014 в 17:32
Первая строка входного файла содержит предложение, записанное с помощью латинских символов, цифр и знаков препинания. Все непробельные символы, отличные от латинских символов, следует сразу же удалить из текстов. Это условие
26 сен 2014 в 17:34
Исходя из условия задачи, нужно поступить так: import re print re.sub(r'[^a-zA-Z\s]', '', '112 sadd dfdf 21 dfheif 1223 12') Это выражение удалит все символы, кроме пробельных и латинских букв. Но результат будет отличным от того, что в стартовом посте, так как останется несколько пробелов между буквами.
26 сен 2014 в 17:42
А без "регулярок" это реализовать возможно?
26 сен 2014 в 17:48
Конечно, можно.
26 сен 2014 в 17:50
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
re.sub(r'[^\w\s]+|[\d]+', r'',"112 sadd dfdf 21 dfheif 12,23 12").strip()
Удалит все спецсимволы и числа и в конце почистит пробелы по краям строки.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 26 сен 2014 в 17:37
Александр Молофеев Александр Молофеев
2,346 14 14 серебряных знаков 19 19 бронзовых знаков
Спасибо, а что значат эти вещи: 1) re.sub 2)r'\d+', r''
26 сен 2014 в 17:41
docs.python.org/2/library/re.html в документации все есть. re.sub - это типа string.replace только по регуляркам ищет и по регуляркам заменяет (можно строить сложные схемы) \d+ - это стандартное правило регулярок - числа ноль и больше раз подряд.
26 сен 2014 в 17:44
В вашем случае останутся символы подчеркивания _
26 сен 2014 в 17:45
name 're' is not defined выдает это
26 сен 2014 в 17:46
re это строка, которая поддается обработке.
28 сен 2014 в 6:31
Регулярное выражение \d+ находит цифры. re.sub() функцию можно использовать, чтобы удалить все цифры из строки, включая Юникод:
import re s = u"standard digits: 123; unicode: \uff11\uff12\uff13." s = re.sub(r"\d+", "", s, flags=re.UNICODE) # -> standard digits: ; unicode: .
bytes.translate() -- это эффективный метод по удалению набора байт (стандартных цифр в данном случае) из строки:
s = b"standard digits: 123;" s = s.translate(None, b"0123456789") # -> standard digits: ;
Другие способы, например, используя set() со списками включения или str.replace() в цикле (или с reduce() ) более многословны и медленнее.


