2011-11-11 17 views
4

私はLionとPython 2.7.1を実行しているMacを持っています。私はreモジュールから非常に奇妙なことに気づいています。私は次の行を実行する場合:Python 2.7.1のreモジュールでre.split関数とre.DOTALLフラグを持つバグ

print re.split(r'\s*,\s*', 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r') 

を私はこの結果を得る:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'] 

しかし、私はこのようなre.DOTALLフラグとそれを実行する場合:

print re.split(r'\s*,\s*', 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r', re.DOTALL) 

それから私は、取得しますこの結果:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q, r'] 

「q、rはc 2つではなく1つのマッチとして賞賛される。

どうしてですか?私は私のパターンでドットを使用していない場合、なぜre.DOTALLフラグが違いを生むのかわかりません。私は何か間違っているのですか、それともバグがありますか?

+0

私はPythonのほぼすべてのバージョンで同じ結果を得ます。これは文書化されているように機能します。ドキュメントを読んで、期待を調整する。 –

答えて

10
>>> s = 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r' 
>>> re.split(r'\s*,\s*', s) 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'] 
>>> re.split(r'\s*,\s*', s, maxsplit=16) 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q, r'] 
>>> re.split(r'\s*,\s*', s, flags=re.DOTALL) 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'] 

問題は、それがmaxsplit=0引数、ないflags=0引数を設定しますre.DOTALL位置を、渡しているということです。 re.DOTALLは、定数16であることがあります。

+3

+1これはよくある質問です –

+0

ありがとうございます。それは私にはそれを見つけるのに長い時間がかかりましたが、他の誰かがそれを指摘した後、それはとても明らかです。 –

+0

それは複雑な正規表現パターンで私に起こった、パターンのためではないことを理解するまでに数時間かかった – eyquem

関連する問題