Existe uma listagem ou biblioteca com todas as pontuações que podemos encontrar normalmente?
Normalmente eu uso string.punctuation
, mas alguns caracteres de pontuação não estão incluídos, por exemplo:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Respostas:
Você pode fazer melhor com esta verificação:
As categorias Unicode P * são especificamente para pontuação :
conector (Pc), traço (Pd), cotação inicial (Pi), cotação final (Pf), aberto (Ps), fechado (Pe), outro (Po)
Para preparar a coleção completa, que você pode usar posteriormente para verificações rápidas de associação, use uma compreensão definida:
A expressão de atribuição aqui requer Python 3.8+, equivalente às versões mais antigas do Python:
Cuidado para que alguns dos outros caracteres
string.punctuation
estejam realmente na categoria Unicode Symbol . É fácil adicioná-los também, se você quiser.fonte
$
), Sk (modificador, como^
), Sm (matemática, como+
ou<
) e talvez So (outra, como©
).A resposta postada por wim está correta se você deseja verificar se um caractere é um caractere de pontuação.
Se você realmente precisa de uma lista de todos os caracteres de pontuação, como sugere o título da sua pergunta, você pode usar o seguinte:
fonte
A resposta por wim é ótima se você pode alterar seu código para usar uma função.
Mas se você precisar usar o
in
operador (por exemplo, está chamando o código da biblioteca), poderá usar a digitação de pato:fonte
Parece um trabalho bonito para uma expressão regular (regexp):
Aqui, o regexp corresponde a tudo, exceto espaços em branco ou caracteres de palavras. O sinalizador
re.UNICODE
é usado para corresponder ao conjunto completo de caracteres Unicode.fonte
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
fuga é uma coisa de representação não relacionada à remoção de pontuação).\xc3
não é a codificação Unicode correta deæ
; se você digitar,str(text)
pode confirmar que é\xc3\xa6
. Na verdade\xc3
, não parece ser um ponto de código completo.str
há uma string de bytes. Você definitivamente deve mudar para o Python 3, porque o Unicode é um pesadelo no Py2. Para mim,str('æ')
mostra como'æ'
, eascii('æ')
mostra como'\xe6'
, qual é o ponto de código correto.b'\xc3\xa6'
é a codificação UTF-8 de'æ'
, mas geralmente não é com isso que você deseja trabalhar.Como outras respostas apontaram, a maneira de fazer isso é através de propriedades / categorias Unicode. A resposta aceita acessa essas informações por meio do
unicodedata
módulo de biblioteca padrão , mas, dependendo do contexto em que você precisar, pode ser mais rápido ou mais conveniente acessar essas mesmas informações de propriedade usando expressões regulares.No entanto, o
re
módulo de biblioteca padrão não fornece suporte estendido a Unicode. Para isso, você precisa doregex
módulo , disponível no PyPI (pip install regex
):Uma boa visão geral de todos os diferentes tipos de propriedades Unicode que você pode procurar usando expressões regulares é fornecida aqui . Além desses recursos extras de expressão regular, documentados em sua página inicial do PyPI,
regex
fornece deliberadamente a mesma API quere
, portanto, é esperado que você usere
a documentação para descobrir como usar qualquer um deles.fonte