web-dev-qa-db-ja.com

re.groups()が正しく一致した1つのグループに対して何も提供しないのはなぜですか?

このコードを実行すると:

_print re.search(r'1', '1').groups() 
_

_()_の結果を取得します。ただし、.group(0)は一致を示します。

groups()は一致を含むものを提供してはいけませんか?

更新:答えてくれてありがとう。つまり、サブグループなしでre.search()を実行すると、haveを使用してgroups(0)を使用して一致しますか?

29
dtc

キャプチャグループがないため、グループは空です- http://docs.python.org/library/re.html#re.MatchObject.groups 。 group(0)は、グループでキャプチャされたかどうかにかかわらず、一致したテキスト全体を常に返します。

編集済み。

21
arunkumar

私の知る限り、.groups()remembered groupsのタプルを返します。つまり括弧で囲まれた正規表現のグループ。だからあなたが書く場合:

_print re.search(r'(1)', '1').groups()
_

あなたは得るだろう

_('1',)
_

あなたの応答として。一般に、.groups()は、括弧で囲まれた正規表現内のオブジェクトのすべてのグループのタプルを返します。

23
HodofHod

これは、キャプチャグループがないためです(パターンで_()_を使用しないため)。 http://docs.python.org/library/re.html#re.MatchObject.groups

group(0)は、検索結果全体を返します(キャプチャグループがまったくない場合でも): http://docs.python.org/library/re.html#re.MatchObject.group

5
ovgolovin

正規表現にグループがないため、空のリスト(())結果として。

試してみる

re.search(r'(1)', '1').groups()

キャプチャグループを作成するかっこを使用すると、パターンのこの部分に一致する結果がグループに保存されます。

その後、あなたは得る

('1',)

結果として。

3
stema