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