我有一个从 Internet 获得的正则表达式来匹配<a>
标签中的 URL 链接。它如下所示:
variable = re.compile('<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>')
有人能解释一下这个模式将如何与<a>
标签的内容匹配吗?
我对 Unix 中的正则表达式有基本的了解,但这对我来说看起来太复杂了,感谢任何人向我解释这一点。
'<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>'
让我们分解一下。
<a
就是这样,一个标签的开始。\s
表示空格。(?:.*?\s)*?
表示一个非捕获组,尽可能重复或根本不重复,该组的内容是.*?
:任何内容,然后是空格。href=
就是这样,标签的一部分。[\'"]
表示要么'
或"
(.*?)
是你的捕获组,它捕获任何东西。[\'"]
表示要么'
或"
.*?
任何东西,或者什么都没有>
就这样,标签的结尾。这在英语中是什么意思?
<a ANYTHING href=URL>
ANYTHING 被忽略,并且 URL 被捕获。
小细节:
'
或者"
(因此包含在正则表达式中)。<a> ... </a>
或<a ... >
href=
是我们想要的属性——也就是链接地址。好吧,@Inbar rose 已经详细回答了您的问题,但是当您使用正则表达式获取链接时,可能会有一些链接出现问题。如果您可以通过使用正常的拆分函数来获取它们,请考虑考虑一般的 html 语法 -
a='<a href="http://www.google.com">'r
print a.split('href=')[1].split('"')[1]
>> http://www.google.com