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
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)
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.
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.