-1

<a>タグ内の URL リンクに一致するようにインターネットから取得した正規表現があります。以下のように表示されます。

variable = re.compile('<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>')

<a>このパターンがタグの内容とどのように正確に一致するのか、誰か説明してくれませんか?

Unix での正規表現の基本的な理解はしていますが、これは私には複雑すぎるように見えます。説明してくれる人に感謝します。

4

2 に答える 2

3

'<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>'

それを分解しましょう。

  • <aまさに、タグの始まりです。
  • \s空白を意味します。
  • (?:.*?\s)*?可能な限り繰り返されるか、まったく繰り返されない非キャプチャ グループを意味します。このグループの内容は次の.*?とおりです。
  • href=は、タグの一部です。
  • [\'"]またはのいずれ'かを意味します"
  • (.*?)は、何でもキャプチャするキャプチャ グループです。
  • [\'"]またはのいずれ'かを意味します"
  • .*?何でも、または何も
  • >それだけ、タグの終わり。

これは英語で何という?

<a ANYTHING href=URL>

ANYTHING は無視され、URL がキャプチャされます。

細部:

  • 'URL は、またはのいずれかの引用符で囲まれています"(したがって、正規表現に含まれています)。
  • ANYTHING は、リンク上に存在する可能性のある属性です。
  • 基本的な HTML を理解していれば、すべてのリンクがタグ<a> ... </a>または<a ... >
  • これhref=は必要な属性で、リンク アドレスです。
于 2013-01-10T09:02:58.000 に答える
0

@Inbar ローズはすでにあなたの質問に詳細に答えていますが、リンクを取得するために正規表現を使用すると問題が発生するリンクがいくつかあるかもしれません.通常の分割関数を使用してそれらを取得できる場合は、一般的なhtml構文を考慮してください -

a='<a href="http://www.google.com">'r
print a.split('href=')[1].split('"')[1]

>> http://www.google.com
于 2013-01-10T11:52:23.343 に答える