web-dev-qa-db-fra.com

Ensemble complet de signes de ponctuation pour Python (pas seulement ASCII)

Existe-t-il une liste ou une bibliothèque contenant toutes les ponctuations que nous pourrions rencontrer?

Normalement, j'utilise string.punctuation, mais certains caractères de ponctuation n'y sont pas inclus, par exemple:

>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
41
samuelbrody1249

La réponse par wim est génial si vous pouvez changer votre code pour utiliser une fonction.

Mais si vous devez utiliser l'opérateur in (par exemple, vous appelez dans le code de la bibliothèque), vous pouvez utiliser la saisie duck:

import unicodedata
class DuckType:
    def __contains__(self,s):
        return unicodedata.category(s).startswith("P")
punct=DuckType()
#print("'" in punct,'"' in punct,"a" in punct)
2
xkcdjerry

Cela semble être un joli travail pour une expression régulière (regexp):

    import re
    text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)

Ici, l'expression rationnelle correspond à tout sauf les espaces ou les caractères Word. Le drapeau re.UNICODE est utilisé pour faire correspondre l'ensemble complet de caractères Unicode.

1
Nicolas Martinez

Comme d'autres réponses l'ont souligné, la façon de le faire est via les propriétés/catégories Unicode. La réponse acceptée accède à ces informations via le module bibliothèque standard unicodedata, mais selon le contexte où vous en avez besoin, il peut être plus rapide ou plus pratique d'accéder à ces mêmes informations de propriété en utilisant expressions.

Cependant, la bibliothèque standard re module ne fournit pas de support Unicode étendu. Pour cela, vous avez besoin du regex module , disponible sur PyPI (pip install regex):

>>> import regex as re
>>> re.match("\p{Punctuation}", "'")
<regex.Match object; span=(0, 1), match="'">
>>> re.match("\p{Punctuation}", "’")
<regex.Match object; span=(0, 1), match='’'>

Un bon aperçu de tous les différents types de propriétés Unicode que vous pouvez rechercher à l'aide d'expressions régulières est fourni ici . Outre ces fonctionnalités d'expressions régulières supplémentaires, qui sont documentées sur sa page d'accueil PyPI, regex fournit délibérément la même API que re, vous êtes donc censé utiliser la documentation de re pour comprendre comment utiliser l'un ou l'autre.

0
dlukes