Я пытаюсь удалить знаки препинания из строки в Юникоде, которая может содержать буквы, отличные от ascii. Я попытался с помощью regex
модуля:Снимать специальные символы и знаки препинания из строки юникода
import regex
text = u"<Üäik>"
regex.sub(ur"\p{P}+", "", text)
Однако, я заметил, что персонажи <
и >
не удаляются. Кто-нибудь знает, почему и есть ли другой способ преградить пунктуацию из строк Unicode?
EDIT: Еще один подход, который я опробовал делает:
import string
text = text.encode("utf8").translate(None, string.punctuation).decode("utf8")
, но я хотел бы избежать преобразования текста из Юникода в строку и обратно.
Вы должны определить, что пунктуация. Особенно в юникоде это может быть очень много символов и комбинаций символов в зависимости от вашего языка. –
Вам не нужно конвертировать в UTF-8 с высоким значением, чтобы использовать 'unicode.translate()'. Используйте 'text.translate (dict.fromkeys (ord (c) для c в string.punctuation))'. –
И '\ p {P}' не включает '<' as '>'; они не классифицируются как знаки препинания. Они являются [Math Symbol (Sm)] (https://codepoints.net/search?gc=Sm) chodepoints. –