Przydałaby Ci się ta kontrola:
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
Kategorie Unicode P * dotyczą specjalnie interpunkcji :
złącze (Pc), myślnik (Pd), wstępny cytat (Pi), końcowy cytat (Pf), otwórz (Ps), zamknij (Pe), inny (Po)
Aby przygotować wyczerpującą kolekcję, którą możesz następnie wykorzystać do szybkiej kontroli członkostwa, użyj zestawu:
>>> 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
Wyrażenie przypisania tutaj wymaga Python 3.8+, odpowiednik dla starszych wersji Python:
chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))
Uważaj, że niektóre inne znaki w string.punctuation
rzeczywistości znajdują się w symbolu kategorii Unicode . Możesz je łatwo dodać, jeśli chcesz.