Вы могли бы сделать лучше с этой проверкой:
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
Unicode категории P * специально для пунктуации :
соединитель (Pc), тире (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 . Это легко добавить, если вы хотите.