Remove specific characters from a string in Python
Удаление определенных символов из строки в Python
Я пытаюсь удалить определенные символы из строки с помощью Python. Это код, который я использую прямо сейчас. К сожалению, похоже, что он ничего не делает со строкой.
for char in line: if char in" ?.!/;:": line.replace(char,'')
Строки в Python неизменяемы (не могут быть изменены). Из-за этого эффект line.replace(...) заключается просто в создании новой строки, а не в изменении старой. Вам нужно перепривязать (присвоить) ееline, чтобы эта переменная приняла новое значение с удалением этих символов.
Кроме того, способ, которым вы это делаете, будет относительно медленным. Это также, вероятно, немного сбивает с толку опытных разработчиков python, которые увидят дважды вложенную структуру и на мгновение подумают, что происходит что-то более сложное.
Начиная с Python 2.6 и более новых версий Python 2.x *, вы можете вместо этого использовать str.translate, (смотрите Ответ на Python 3 ниже):
Символы, заключенные в квадратные скобки, составляют символьный класс. Любые символы в line, которые находятся в этом классе, заменяются вторым параметром на sub: пустую строку.
Ответ на Python 3
В Python 3 строки имеют формат Unicode. Вам придется перевести немного по-другому. kevpie упоминает это в комментарии к одному из ответов, и это отмечено в документации для str.translate.
При вызове translate метода строки в Юникоде вы не можете передать второй параметр, который мы использовали выше. Вы также не можете передать None в качестве первого параметра. Вместо этого вы передаете таблицу перевода (обычно словарь) в качестве единственного параметра. Эта таблица сопоставляет порядковые значения символов (т.Е. Результат их вызова ord) с порядковыми значениями символов, которые должны их заменить, или — что полезно для нас —None чтобы указать, что они должны быть удалены.
Итак, чтобы проделать описанный выше танец со строкой Unicode, вы бы вызвали что-то вроде
* для совместимости с более ранними версиями Python вы можете создать таблицу перевода "null" для передачи вместо None:
import string line = line.translate(string.maketrans('', ''), '!@#$')
Здесь string.maketrans используется для создания таблицы перевода, которая представляет собой просто строку, содержащую символы с порядковыми значениями от 0 до 255.
a = "a!b@c#d$" b = "!@#$" for char in b: a = a.replace(char, "")
print(a) # result: "abcd"
Ответ 3
>>> line = "abc#@!?efg12;:?" >>> ''.join( c for c in line if c notin'?:!/;' ) 'abc#@efg12'
Ответ 4
С помощью re.sub регулярного выражения
Начиная с Python 3.5, стала доступна подстановка с использованием регулярных выражений re.sub:
import re re.sub('\ |\?|\.|\!|\/|\;|\:', '', line)
Пример
import re line = 'Q: Do I write ;/.??? No!!!' re.sub('\ |\?|\.|\!|\/|\;|\:', '', line)
'QDoIwriteNo'
Объяснение
В регулярных выражениях (regex), | является логическим OR и \ экранирует пробелы и специальные символы, которые могут быть фактическими командами регулярных выражений. Тогда как sub означает подстановку, в данном случае пустой строкой ''.