2013-01-10 432 views
-1

我有一個正則表達式,我從互聯網上獲得了匹配URL鏈接的<a>標籤。看起來如下:瞭解這個正則表達式

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

會有人請解釋我是這樣打算彭定康究竟如何來匹配<a>標籤的內容是什麼?

我對Unix中的正則表達式有基本的理解,但這對我來說看起來太複雜了,並且非常感謝任何人向我解釋這一點。

+0

您是否檢查了[Python正則表達式](http://docs.python.org/2/library/ re.html)文檔?有沒有什麼特別的你不明白? –

+0

寫出一些href標籤,並嘗試刪除正則表達式的特定部分,以查看它如何改變匹配和不匹配的內容。 – dutt

+0

和通常必須:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – root

回答

3

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

可以打破它。

  • <a就是這樣,一個標籤的開始。
  • \s表示空白。
  • (?:.*?\s)*?意味着一個非捕獲組,重複儘可能多的次數,或根本沒有, 該組的內容是.*?:任何東西,然後是空白。
  • href=就是這個標籤的一部分。
  • [\'"]意味着要麼'"
  • (.*?)是您的捕獲組,捕捉任何東西。
  • [\'"]意味着要麼'"
  • .*?什麼,或者什麼都不
  • >只是,標籤結束。

這是什麼意思在英語?

<a ANYTHING href=URL>

都被忽略,而URL被捕獲。

小細節:

  • URL被用引號包圍字符,要麼'"(因此包括在正則表達式)。
  • ANYTHING是鏈接上可能存在的屬性。
  • 如果你瞭解基本的HTML,那麼你知道,任何一個環節是在標籤<a> ... </a><a ... >
  • href=是我們想要的屬性 - 這是鏈接地址。
+0

它可能值得一提的是'?'被用來作出限定符非貪婪。 (在這種情況下,它可以防止兩個或多個標籤被讀取爲一個) – DanielB

+0

@DanielB是的,這段代碼是足夠動態的,如果你想捕獲屬性,你可以從非捕獲組中刪除'?:'使其捕捉。 –

+0

nono,就像在'(。*?)' – DanielB

0

嘛@Inbar玫瑰已經回答了你的問題詳細, 但可能有一些聯繫,當你使用正則表達式得到的鏈接,這將有問題..Incase可以通過使用普通的分割函數來獲取它們,同時考慮到一般的html語法 -

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

>> http://www.google.com 
+0

你在你的分裂''href =''中寫道,但它不在你的例子中。這有點令人困惑。 –

+0

@InbarRose - 對不起,這是一個錯誤..我再次編輯它。 – minocha