1

次の正規表現

\s*([\w_]*)\s*(,\s*|=\s*(\d*)\s*,)\n

次の行に一致します (改行追加されます)

  _FIRST_ELEMENT_      = 10000,

Windows ではありますが、Mac ではありません。私が使用している環境は、CPython 2.6 インタープリターを使用する Cinema 4D (3D ソフトウェア) の Python 実装です。

私は Mac を持っていないので、誰かが簡単なテストをしてくれました。しかし、彼には私のためにさらに検査をする時間がありません。

両方のプラットフォーム (Win/Mac) で、同じコードが Cinema 4D のスクリプト ウィンドウでテストされています。

import re
enum_match = re.compile('\s*(\w*)\s*(,\s*|=\s*(\d*)\s*,)\n')
line = '  _FIRST_ELEMENT_      = 10000,\n'
match = enum_match.match(line)

if not match:
    print "Regex did not match."
else:
    print match.groups()

Windows での出力:

('_FIRST_ELEMENT_', '= 10000,', '10000')

Mac での出力:

Regex did not match.

私が考えることができる唯一のことは、アンダースコア( )がMac_に含まれていないことです。\w

正規表現が Windows では一致するのに Mac では一致しない理由を知っていますか?

4

2 に答える 2

2

代わりにこれを使用してください:

 enum_match = re.compile('\s*(\w*)\s*(,\s*|=\s*(\d*)\s*,)$')

Mac OS X と Windows では、テキスト ファイルの行末を示す文字が異なります。あなたのファイルは Windows の種類を使用しているようです。「\n」は、コードが実行されているオペレーティング システムで使用される文字と一致すると思いますが、ファイルで使用されている文字ではない可能性があります。正規表現で '\n' の代わりに '$' を使用すると、どちらのオペレーティング システムでも機能するはずです (この説明が正しくない場合でも)。

于 2012-05-15T13:58:19.360 に答える
1

\nすべてのシステムで同じではないため、改行文字が問題であると思います。

次のようなより一般的なことを行うことができます

\s*([\w_]*)\s*(,\s*|=\s*(\d*)\s*,)(?:\r\n?|\n)

これは\r、オプションの\n以下と一致するか、またはのみと一致し\nます。これは、最近改行シーケンスとして使用されるすべての組み合わせをカバーすると思います。

于 2012-05-15T13:52:42.170 に答える