Вы могли бы сделать лучше с этой проверкой:
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
Категории Unicode P * специально для Знаки пунктуации :
разъем (P c), da sh (Pd), начальная кавычка (Pi), конечная кавычка (Pf), открытая (Ps), закрытая (Pe), другая (Po)
Чтобы подготовить исчерпывающую коллекцию, которую вы впоследствии сможете использовать для быстрых проверок членства, используйте понимание набора:
>>> 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
Выражение присваивания здесь требуется Python 3.8+, эквивалентно более старые Python версии:
chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))
Помните, что некоторые другие символы в string.punctuation
на самом деле относятся к категории Unicode Symbol . Их легко добавить, если хотите.