Я сопоставляю идентификаторы, но теперь у меня проблема: мои идентификаторы могут содержать символы Юникода. Поэтому старого способа сделать что-то недостаточно:
t_IDENTIFIER = r"[A-Za-z](\\.|[A-Za-z_0-9])*"
В синтаксическом анализаторе моего языка разметки я сопоставляю символы юникода, разрешая всем символам, кроме тех, которые я явно использую, потому что мой язык разметки содержит только два или три символа, которые мне нужно экранировать.
Как мне сопоставить все символы Юникода с регулярными выражениями Python и ply? И это вообще хорошая идея?
Я бы хотел, чтобы люди использовали идентификаторы, такие как Ω »« ° foo² väli π, в качестве идентификаторов (имена переменных и тому подобное) в своих программах. Черт! Я хочу, чтобы люди могли писать программы на своем родном языке, если это практично! В любом случае, в настоящее время юникод поддерживается в самых разных местах, и он должен распространяться.
Редактировать: Классы символов POSIX, похоже, не распознаются регулярными выражениями Python.
>>> import re
>>> item = re.compile(r'[[:word:]]')
>>> print item.match('e')
None
Редактировать: Чтобы лучше объяснить, что мне нужно. Мне нужно регулярное выражение, которое соответствует всем печатным символам Юникода, но не символам ASCII.
Редактировать: r "\ w" делает немного то, что я хочу, но оно не соответствует «», и мне также нужно регулярное выражение, которое не соответствует числам.