提取格式复杂的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>
在这些例子中,第一个网址后面紧跟着一个句号,这个句号需要被排除。第二个链接的末尾有一个右括号,第三个链接在遇到HTML标签时结束。
对我来说,句号(和右括号)在网址中是有效的字符,前提是它们不是字符串的最后一个字符。简单来说,问题在于如何处理那些在字符串中有效,但如果是最后一个字符就不算有效的字符。
我目前的正则表达式在处理这种情况时无法奏效(用Python写的):
m = re.findall("((http:|https:)//[^ \<]+)",line)
有没有什么优雅的方法来解决这个问题呢?
1 个回答
3
你可以通过下面的方式来禁止句号作为最后一个符号:
m = re.findall("((http:|https:)//[^ \<]*[^ \<\.])",line)