我的问题类似于this one,但更复杂。
我试图弄清楚从文本文档中提取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>
在这些示例中,第一个URL的句子结束时段紧跟在需要排除的链接之后。第二个链接在URL的末尾有一个右括号,第三个链接在到达HTML标记时结束。
就我的目的而言,句号(和右括号)是有效的URL字符,除非它是最后一个字符。简而言之,问题是如何处理字符串中有效的字符,只要它们不是字符串中的最后一个字符。
我目前无法处理此案例的正则表达式是(在Python中):
m = re.findall("((http:|https:)//[^ \<]+)",line)
有关优雅方法的任何想法吗?
答案 0 :(得分:3)
你可以禁止句号作为最后一个符号:
m = re.findall("((http:|https:)//[^ \<]*[^ \<\.])",line)