Vous pourriez faire mieux avec cette vérification:
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
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:
>>> import sys
>>> from unicodedata import category
>>> codepoints = range(sys.maxunicode + 1)
>>> punctuation = {c for i in codepoints if category(c := chr(i)).startswith("P")}
>>> "'" in punctuation
True
>>> "’" in punctuation
True
L'expression d'affectation ici nécessite Python 3.8+, équivalent pour les anciennes versions de Python:
chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))
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.