2017-02-15 14 views
1

私はbeginner.I'mがre.split程度の出力(約疑問を持つのpythonだ)Pythonのre.split()疑わしい結果

text='alpha, beta,,,gamma dela' 
In [9]: re.split('(,)+',text) 
Out[9]: ['alpha', ',', ' beta', ',', 'gamma dela'] 

In [11]: re.split('(,+)',text) 
Out[11]: ['alpha', ',', ' beta', ',,,', 'gamma dela'] 

In [7]: re.split('[,]+',text) 
Out[7]: ['alpha', ' beta', 'gamma dela'] 

、なぜこれらの出力が異なっていますか? 大変ありがとうございました!

+2

**にはキャプチャグループ**が含まれています。その場合、キャプチャグループも結果に含まれます。 –

答えて

2

としてはre.splitdocumentationで指定されている:

re.split(pattern, string, maxsplit=0, flags=0)

分割ストリングパターンの出現によって。 キャプチャ括弧 がパターンで使用されている場合、パターン のすべてのグループのテキストも結果リストの一部として返されます。 maxsplitが で0以外の場合、最大でmaxsplitの分割が発生し、 文字列の残りの部分がリストの最後の要素として返されます。

捕捉基は、通常?:又は先読み/後読みマーカーを含まない括弧((..))を用いて説明します。キャプチャグループは、単一のコンマある最初のケースで

(,)+ 
#^^ 
    (,+) 
#^^ 

:だから、最初の二つの正規表現は、キャプチャグループを持っています。つまり、最後のキャプチャが使用されます(カンマ1つ)。 2番目のケース((,+))では、複数のカンマをキャプチャできます(正規表現は可能な限りキャプチャすることを目的としているため、ここですべてをキャプチャします)。

最後のケースでは、キャプチャグループがないため、分割が行われ、パターンと一致するテキストは完全に無視されます。

+1

あなたは私をたくさん助けました!ありがとう^ _ ^ –

関連する問題