Existe-t-il une liste ou une bibliothèque contenant toutes les ponctuations que nous pourrions rencontrer couramment?
Normalement string.punctuation
, j'utilise , mais certains caractères de ponctuation n'y sont pas inclus, par exemple:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Réponses:
Vous pourriez faire mieux avec cette vérification:
Les catégories Unicode P * sont spécifiquement destinées à la ponctuation :
connecteur (Pc), tiret (Pd), devis initial (Pi), devis final (Pf), ouvert (Ps), fermé (Pe), autre (Po)
Pour préparer la collection exhaustive, que vous pouvez ensuite utiliser pour des vérifications d'adhésion rapides, utilisez une compréhension d'ensemble:
L'expression d'affectation ici nécessite Python 3.8+, équivalent pour les anciennes versions de Python:
Sachez que certains des autres caractères de
string.punctuation
sont en fait dans la catégorie Unicode Symbole . Il est facile de les ajouter également si vous le souhaitez.la source
$
), Sk (modificateur, comme^
), Sm (math, comme+
ou<
), et peut-être So (autre, comme©
).La réponse publiée par wim est correcte si vous voulez vérifier si un caractère est un caractère de ponctuation.
Si vous avez vraiment besoin d'une liste de tous les caractères de ponctuation comme le suggère le titre de votre question, vous pouvez utiliser ce qui suit:
la source
La réponse de wim est excellente si vous pouvez changer votre code pour utiliser une fonction.
Mais si vous devez utiliser l'
in
opérateur (par exemple, vous appelez dans le code de bibliothèque), vous pouvez utiliser la frappe de canard:la source
Cela semble être un joli travail pour une expression régulière (regexp):
Ici, l'expression rationnelle correspond à tout sauf aux espaces blancs ou aux caractères de mot. Le drapeau
re.UNICODE
est utilisé pour faire correspondre un ensemble complet de caractères Unicode.la source
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
évasion est une chose de représentation sans rapport avec le dépouillement de la ponctuation).\xc3
n'est pas le codage Unicode correct deæ
; si vous tapez,str(text)
vous pouvez confirmer que c'est le cas\xc3\xa6
. En fait,\xc3
cela ne semble pas être un point de code complet.str
trouve une chaîne d'octets. Vous devriez certainement passer à Python 3, car Unicode est un cauchemar dans Py2. Pour moi,str('æ')
montre comme'æ'
, etascii('æ')
montre comme'\xe6'
, qui est le bon point de code.b'\xc3\xa6'
est le codage UTF-8'æ'
, mais ce n'est généralement pas ce avec quoi vous voulez travailler.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
unicodedata
module de bibliothèque standard , 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é à l'aide d'expressions régulières.Cependant, le
re
module de bibliothèque standard ne fournit pas de prise en charge étendue d'Unicode. Pour cela, vous avez besoin duregex
module , disponible sur PyPI (pip install regex
):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'expression régulière supplémentaires, qui sont documentées sur sa page d'accueil PyPI,
regex
fournit délibérément la même API quere
, vous êtes donc censé utiliserre
la documentation de pour comprendre comment utiliser l'une ou l'autre.la source