1

以下のプログラムで括弧を使用した場合の出力は ['www.google.com']です。

import re
teststring = "href=\"www.google.com\""
m=re.findall('href="(.*?)"',teststring)
print m;

findall 関数の出力で括弧を削除すると、['href="www.google.com"'].

import re
teststring = "href=\"www.google.com\""
m=re.findall('href=".*?"',teststring)
print m;

誰かがそれがどのように機能するかを説明すると役に立ちます。

4

1 に答える 1

5

re.findall()ドキュメントは違いについて非常に明確です:

文字列のリストとして、文字列内のパターンの重複しない一致をすべて返します。[…] パターンに 1 つ以上のグループが存在する場合は、グループのリストを返します。パターンに複数のグループがある場合、これはタプルのリストになります。

したがって.findall()、パターン内のグループの数に応じて、3 種類の値のいずれかを含むリストが返されます。

  • 0 パターン内のグループのキャプチャ ((...)括弧なし): 一致した文字列全体 ( 'href="www.google.com"'2 番目の例)。
  • パターン内の 1 つのキャプチャ グループ: キャプチャされたグループを返し'www.google.com'ます (最初の例では)。
  • パターン内の複数のキャプチャ グループ: 一致したすべてのグループのタプルを返します。

(?:...)その動作が必要ない場合は非キャプチャ グループ ( ) を使用するか、詳細情報が必要な場合はグループを追加します。たとえば、href=パーツの周りにグループを追加すると、それぞれ 2 つの要素を持つタプルのリストが作成されます。

>>> re.findall('(href=)"(.*?)"', teststring)
[('href=', 'www.google.com')]
于 2013-01-22T11:38:33.187 に答える