Дополнительно
Лучший способ удаления знаков препинания из строки
Кажется, что должен быть более простой способ, чем:
import string
s = "string. With. Punctuation?" # Sample string
out = s.translate(string.maketrans("",""), string.punctuation)
Так ли это?
570
20
С точки зрения эффективности, вы не сможете победить
Для более высоких версий Python используйте следующий код:
Он выполняет необработанные строковые операции на C с помощью таблицы поиска - мало что может превзойти это, кроме написания собственного кода на C.
Если скорость не волнует, можно воспользоваться другим вариантом:
Это быстрее, чем s.replace для каждого символа, но не будет работать так же хорошо, как подходы не на чистом python, такие как regexes или string.translate, как видно из приведенных ниже таймингов. Для такого типа задач выгодно решать их на как можно более низком уровне.
Временной код:
Это дает следующие результаты:
Регулярные выражения достаточно просты, если вы их знаете.
Для удобства использования, я подводить к сведению чередование препинания из строки в Python 2 и Python 3. Пожалуйста, обратитесь к другим ответы за подробное описание.
Питон 2
В Python 3
Обычно я использую что-то вроде этого:
строку.пунктуация` является ASCII только! Более правильно (но гораздо медленнее) способ заключается в использовании модуль unicodedata:
Можно обобщить и прокладки других типов персонажей, а также:
Он также удалит символы, такие как
~*+§$
которые могут или не могут быть "пунктуация" и в зависимости от'с точки зрения.Не обязательно более простой, но другой способ, если вы лучше знакомы с семейством re.
Для Python 3
Ул
или Python 2Юникод
значения,ул. перевести()
принимает только словарем; коды (чисел) ищутся в том, что сопоставление и ничего отображенный наNone
удалена.Снять (какой?) пунктуация затем использовать:
В
дикт.fromkeys()
метод класса делает его тривиальным, чтобы создать сопоставление, установка всех значений вnone
на основе последовательности клавиш.Чтобы удалить все знаки препинания, а не только ASCII символы пунктуации, ваш стол должен быть немного больше; см. Джей Ф. Себастьян'ы answer (питон 3 версии):
строку.пунктуация` не пропускает грузы из знаков препинания, которые обычно используются в реальном мире. Как насчет решения, которое работает для не-ASCII знаков препинания?
Лично я считаю, что это лучший способ, чтобы удалить знаки препинания из строки в Python, потому что:
\{ы}
если вы хотите, чтобы удалить знаки препинания, но держать такие символы, как$
.\{др}
только убрать дефисы.При этом используются свойства символов Юникода, который вы можете узнать больше о Википедии.
Я не'т видел этот ответ. Просто использовать регулярное выражение; она удаляет все символы кроме буквенных символов (
\ж
) и число символов (\д
), сопровождаемый пробельный символ (\с
):Здесь'ы легко для Python 3.5:
Вот функцию я написал. Это's не очень эффективно, но просто и вы можете добавлять или удалять любые знаки препинания, что вы хотите:
Это может не быть лучшим решением, но это, как я это сделал.
Просто как обновление, я переписал @Брайан примеру в Python 3 и внесенные в нее изменения, чтобы двигаться регулярное выражение компилируется в функцию. Моя мысль заключалась в том, чтобы каждый шаг, необходимый для того чтобы сделать функцию работы. Возможно, вы используете распределенных вычислений и может'Т есть выражение общих объектов между рабочими и должны быть повторно.шаг компиляции на каждого работника. Кроме того, мне было любопытно время двух разных реализаций maketrans для Python 3
против
Плюс я добавил еще один метод использования набора, где я использую функцию пересечение, чтобы уменьшить количество итераций.
Это полный код:
Это мои результаты:
Здесь'ы решение без регулярных выражений.
Один вкладыш может быть полезным в не очень строгих случаях: