4

識別子を一致させていますが、問題があります。識別子にUnicode文字を含めることができます。したがって、物事を行うための古い方法では十分ではありません。

t_IDENTIFIER = r"[A-Za-z](\\.|[A-Za-z_0-9])*"

私のマークアップ言語パーサーでは、明示的に使用する文字を除くすべての文字を許可することでUnicode文字を照合します。これは、マークアップ言語には2つまたは3つの文字しかないため、その方法でエスケープする必要があるためです。

すべてのUnicode文字をPython正規表現およびプライと一致させるにはどうすればよいですか?また、これはまったく良い考えですか?

プログラムの識別子(変数名など)として、Ω»«°foo²väliπなどの識別子を使用できるようにしたいと思います。なんてこった!実用的であれば、自分の言語でプログラムを書いてほしいです!とにかく、ユニコードは今日、さまざまな場所でサポートされており、普及するはずです。

編集:POSIX文字クラスはPython正規表現によって認識されないようです。

>>> import re
>>> item = re.compile(r'[[:word:]]')
>>> print item.match('e')
None

編集:私が必要なものをよりよく説明するため。すべてのUnicode印刷可能文字に一致するが、ASCII文字にはまったく一致しない正規表現が必要です。

編集:r "\ w"は私が望むことを少し行いますが、«»とは一致しません。また、数字と一致しない正規表現も必要です。

4

5 に答える 5

5

reモジュールは、次の\w構文をサポートします。

UNICODEが設定されている場合、これは文字[0-9_]に加えて、Unicode文字プロパティデータベースで英数字として分類されているものと一致します。

したがって、次の例は、Unicode識別子を照合する方法を示しています。

>>> import re
>>> m = re.compile('(?u)[^\W0-9]\w*')
>>> m.match('a')
<_sre.SRE_Match object at 0xb7d75410>
>>> m.match('9')
>>> m.match('ab')
<_sre.SRE_Match object at 0xb7c258e0>
>>> m.match('a9')
<_sre.SRE_Match object at 0xb7d75410>
>>> m.match('unicöde')
<_sre.SRE_Match object at 0xb7c258e0>
>>> m.match('ödipus')
<_sre.SRE_Match object at 0xb7d75410>

したがって、探している式は次のとおりです。(?u)[^ \ W0-9] \ w *

于 2008-10-26T21:18:53.630 に答える
4

lex.lex でパス パス パラメータ reflags を渡す必要があります。

lex.lex(reflags=re.UNICODE)
于 2011-12-14T10:26:38.087 に答える
1

この質問への回答を確認してください

Pythonの文字列から印刷できない文字を取り除く

代わりに他のUnicode文字カテゴリを使用する必要があります

于 2008-10-26T16:58:56.370 に答える
1

Vinkoの助けを借りて解決しました。

Unicode の範囲を取得するのは馬鹿げていることに気付きました。だから私はこれをします:

symbols = re.escape(''.join([chr(i) for i in xrange(33, 127) if not chr(i).isalnum()]))
symnums = re.escape(''.join([chr(i) for i in xrange(33, 127) if not chr(i).isalnum()]))

t_IDENTIFIER = "[^%s](\\.|[^%s])*" % (symnums, symbols)

Unicode 文字クラスについてはわかりません。この Unicode が複雑になりすぎたら、元のものを配置するだけです。UTF-8 サポートにより、STRING トークンでのサポートが確実に行われますが、これはより重要です。

編集: 一方、プログラミング言語でユニコードがあまりサポートされていない理由を理解し始めました..これは醜いハックであり、満足のいく解決策ではありません。

于 2008-10-26T17:19:46.903 に答える
0

おそらくPOSIX文字クラスはあなたに適していますか?

于 2008-10-26T16:37:58.737 に答える