理解这个正则表达式

时间:2013-01-10 08:58:45

标签: python regex

我有一个来自互联网的正则表达式,以匹配<a>标签中的网址链接。它如下所示:

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

有人请您解释一下,这个模式究竟与<a>标签的内容相匹配吗?

我对Unix中的正则表达式有基本的了解,但这对我来说太复杂了,感谢任何人向我解释这一点。

2 个答案:

答案 0 :(得分:3)

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

让我们把它分解。

  • <a就是那个标签的开头。
  • \s表示空格。
  • (?:.*?\s)*?表示非捕获组,尽可能多次重复,或根本不重复, 这个组的内容是.*?:任何东西,然后是空格。
  • href=只是标签的一部分。
  • [\'"]表示'"
  • (.*?)是您的捕获组,可捕获任何内容。
  • [\'"]表示'"
  • .*?任何东西,或什么都没有
  • >就是那个,标签的结尾。

这在英语中是什么意思?

<a ANYTHING href=URL>

忽略任何内容,并捕获URL。

小细节:

  • 网址包含引号字符'"(因此包含在正则表达式中)。
  • 任何可能存在于链接上的属性。
  • 如果您了解基本HTML,那么您知道任何链接都在标记<a> ... </a><a ... >
  • href=是我们想要的属性 - 这是链接地址。

答案 1 :(得分:0)

那么@Inbar rose已经详细回答了你的问题, 但是当你使用正则表达式来获取链接时,可能会有一些链接会出现问题。但是你可以使用普通的split函数来获取它们,同时考虑到一般的html语法 -

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

>> http://www.google.com