2017-02-09 57 views
0

正则表达式匹配的URL我使用这个模式的每一个网址在某个网页匹配:Python的 - 在网页源代码

import re 

source = """ 
<p>https://example.com</p> 
... some code 
<font color="E80000">https://example.com</font></a> 
""" 

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', source) 

这为我工作得很好,直到如今。我发现有时它不匹配确切的网址。就像在这个例子中,它匹配为url https://example.com</p>https://example.com</font></a>包含结束标记,但我无法弄清楚正则表达式中的问题。我从另一个堆栈问题中获取这些代码。

+1

您使用连字符一个字符类中两个符号之间,'[$ -_]',创建一个范围,可以匹配''<' and '>,所有ASCII数字和大写信件等等。用'[ - $ _ @。&+]'替换'[$ -_ @。&+]''。 –

+0

看到这个链接http://stackoverflow.com/questions/499345/regular-expression-to-extract-url-from-an-html-link –

+0

你也可以检查这个http://stackoverflow.com/questions/6883049 /正则表达式在python –

回答

0

试试这个,

import re 

source = """ 
<p>https://example.com</p> 
... some code 
<font color="E80000">https://example.com</font> 
https://example.com</p></a> 
https://example.com</font></a> 
""" 
urls = re.findall('(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])?', source) 
print urls