-1

我有一个从 Internet 获得的正则表达式来匹配<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 rose 已经详细回答了您的问题,但是当您使用正则表达式获取链接时,可能会有一些链接出现问题。如果您可以通过使用正常的拆分函数来获取它们,请考虑考虑一般的 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 回答