我有一个来自互联网的正则表达式,以匹配<a>
标签中的网址链接。它如下所示:
variable = re.compile('<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>')
有人请您解释一下,这个模式究竟与<a>
标签的内容相匹配吗?
我对Unix中的正则表达式有基本的了解,但这对我来说太复杂了,感谢任何人向我解释这一点。
答案 0 :(得分:3)
'<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>'
让我们把它分解。
<a
就是那个标签的开头。\s
表示空格。(?:.*?\s)*?
表示非捕获组,尽可能多次重复,或根本不重复,
这个组的内容是.*?
:任何东西,然后是空格。href=
只是标签的一部分。[\'"]
表示'
或"
(.*?)
是您的捕获组,可捕获任何内容。[\'"]
表示'
或"
.*?
任何东西,或什么都没有>
就是那个,标签的结尾。这在英语中是什么意思?
<a ANYTHING href=URL>
忽略任何内容,并捕获URL。
小细节:
'
或"
(因此包含在正则表达式中)。<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