Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Как найти символы из кортежа ('!',',','?') в строке и удалить их?

#python #python_3x


Есть кортеж:

a= ('!',',','?')


И строка

dasd,sadarg!ada


Как можно найти символы из кортежа в строке и удалить их?
    


Ответы

Ответ 1



Например, так: >>> a=('!',',','?') >>> s='dasd,sadarg!ada' >>> ''.join(filter(lambda x: x not in a, s)) 'dasdsadargada' или >>> ''.join(x for x in s if x not in a) 'dasdsadargada' И в том и в другом случае не удаляем символы из старой строки, а создаем новую строку, в которую входят только те символы старой строки, которые удовлетворяют условию "символ x не входит в кортеж а" (x not in a).

Ответ 2



Best way to strip punctuation from a string in Python показывает как можно удалить пунктуацию, используя разные подходы такие как: регулярные выражения, str.replace(), bytes.translate(), listcomp/genexpr, а также сравнивает их производительность. Похожий вопрос Deleting consonants from a string in Python проводит сравнение для Питона 3. Remove punctuation from Unicode formatted strings демонстрирует решения с акцентом на не-ascii пунктуацию. Наиболее простое для понимания решение это использовать genexpr как показано в ответе @insolor. Идентичное решение, которое использует listcomp, является более производительным на CPython: punct = ('!',',','?') no_punct = ''.join([c for c in text if c not in punct]) Если входной текст содержит только ascii, то .translate() метод быстрее в 10-20 раз: translation_table = dict.fromkeys(map(ord, punct)) def remove_punctuation(text): # Python 3.5+ improves performance otherwise use bytes.translate return text.translate(translation_table) Чтобы удалить все возможные Юникодные символы пунктуации из текста: #!/usr/bin/env python3 import regex # $ pip install regex def remove_punctuation(text): return regex.sub(r"\p{P}+", "", text) Производительность решения с .replace() ухудшается с увеличением длины punct и text (необходимо сравнение с другими подходами для каждого случая): from functools import reduce no_punct = reduce(lambda text, p: text.replace(p, ''), punct, text) Для коротких кортежей .replace() уступает (незначительно) только bytes.translate().

Комментариев нет:

Отправить комментарий