2016-04-10 5 views
0

私はPythonでグループ化することによって完全に混乱しています。たとえば:正規表現でグルーピングする

import re 

m = re.search('From:\s+(.+)\s+To:\s+(.*)\s*', 'From: Toronto To: Beijing') 
print m.group(0) 
print m.group(1) 
print m.group(2) 

私はこのプログラムを実行した後、私は3件の結果を得ることができますが、私は、このような結果を得るなぜ私にはわからない:

From: Toronto To: Beijing 
Toronto 
Beijing 

また、時々私はgroupメソッドを使用する場合一致するオブジェクトの "いいえ、そのようなグループ"と言う警告が表示されます。

だから誰でも簡単な言葉で私に正規表現のグループ化の使い方を説明できますか?

+0

"0"は全体の文字列です。 「1」は最初のかっこの間の一致であり、「2」は第2のかっこの間の一致である – Redu

答えて

1

正規表現で括弧を使用すると、これはグループを示します。あなたはそれを2回行い、グループの名前は1から始まり、正規表現の左から右に向かって読み込まれます。

グループ0は、マッチ全体の特別なグループです。

グループを不一致にするには、(?:something)を使用します。 デモ:

>>> s = '12 34 56' 
>>> m = re.search('(\d+)\s+(?:\d+)\s+(\d+)', s) 
>>> m.group(0) # everything 
'12 34 56' 
>>> m.group(1) # content of first matching group 
'12' 
>>> m.group(2) # content of second matching group 
'56' 

m.groups()は順番に、あなたに一致するすべてのグループのコンテンツを提供します:

>>> m.groups() 
('12', '56') 
1

をあなたはおそらく気づいているとして、正規表現の中の括弧の使用は、キャプチャグループを作成します(あなたがそうしないと言っている場合を除き、そうでない場合、それは非捕獲集団になります)。したがって、正規表現では、0番目のグループが常にキャプチャされます。最初のグループは(.+)に対応し、2番目のグループは(.*)に対応します。