Python 用于提取格式困难的URL的正则表达式

Python 用于提取格式困难的URL的正则表达式,python,regex,url,hyperlink,Python,Regex,Url,Hyperlink,我的问题类似于,但更复杂 我试图找出一个正则表达式来从文本文档中提取URL。棘手的是,一些URL被嵌入到更难解析格式的句子中。下面是我想从中提取URL的文本示例: <p>There are several links of the general format http://www.foo.com/index.html.</p> <p>There are many websites (e.g. http://www.foo.com/abc/def?a=2&am

我的问题类似于,但更复杂

我试图找出一个正则表达式来从文本文档中提取URL。棘手的是,一些URL被嵌入到更难解析格式的句子中。下面是我想从中提取URL的文本示例:

<p>There are several links of the general format http://www.foo.com/index.html.</p>
<p>There are many websites (e.g. http://www.foo.com/abc/def?a=2&b=3) that end oddly: http://www.foo.com/results</p>
有几个通用格式的链接http://www.foo.com/index.html.

有许多网站(例如。http://www.foo.com/abc/def?a=2&b=3)奇怪的是:http://www.foo.com/results

在这些示例中,第一个URL在需要排除的链接后面有一个句子结束句点。第二个链接在URL的末尾有一个右括号,第三个链接在碰到HTML标记时结束

就我而言,句点(和右括号)是有效的URL字符,除非它是最后一个字符。简而言之,问题在于如何处理字符串中的有效字符,前提是这些字符不是字符串中的最后一个字符

我目前无法处理这种情况的正则表达式是(Python):


m=re.findall(((http:| https:)/[^\您可以禁止句点作为最后一个符号,如下所示:

m = re.findall("((http:|https:)//[^ \<]*[^ \<\.])",line)

m=re.findall(((http:| https:)/[^\可能你想要一个这样的魔兽世界,我绝对没有想到。非常简单的解决方案。谢谢!
m = re.findall("((http:|https:)//[^ \<]*[^ \<\.])",line)