为什么这行正则表达式捕获空格?

时间:2014-03-04 02:49:35

标签: regex python-2.7 syntax

我正在使用this SO answer中找到的以下正则表达式:

  

(:[\ W [AZ] - ] +:(:?[。] / {1,3} | | [A-Z0-9%])WWW \ d {0,3} | [一-z0-9 .-] + [??] [AZ] {2,4} /)。(?:[^ \ S()&LT;&GT;] + |(([^ \ S()&LT;&GT ;] + |(([^ \ S()&LT;&GT;] +)))))+(?:(([^ \ S()&LT;&GT;] + |(([^ \ S()&LT;&GT;] +))))| [^ \ s`()[!] {} ;:'”,&LT;?&GT;«»‘’ ''])< / p>

我正在使用以下字符串对其进行测试:

  

“Quattro Amici将于2014年3月3日举行音乐会。长期合作者Lun Jiang,小提琴; Roberta Zalkind,中提琴; Pegsoon Whang,大提琴;以及Karlyn Bond,钢琴,将演奏Franz Joseph Haydn,Wolfgang Amadeus Mozart的作品,Ludwig van Beethoven和Gabriel Faure。要购买门票,请访问westminstercollege.edu/culturalevents或致电801-832-2457。 - 查看更多:http://entertainment.sltrib.com/events/view/quattro_amici_in_concert#sthash.QRsLXXiA.dpuf

我只是试图从字符串中提取网址并基于一堆SO答案,我发现正则表达式是该工作的推荐工具。我不是一个正则表达式专家(或者甚至是我理解中的中间人),所以我对空字符串感到困惑,我的re.findall()一直在返回。我使用正则表达式伙伴穿过正则表达式线,但仍然没有运气。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

我不确定像这样的大正则表达式是完全必要的 - 如果您只是想获取链接,您可以使用更简单的正则表达式,如下所示:

/(https?:\/\/[\w\d\$-_\.\+!\*'\(\),\/#]+)/ig

根据RFC 1738,网址只允许使用上面类中指定的字符,因此它应该覆盖任何有效的网址,而不会出现如此庞大的正则表达式。

您还可以使用regexpal.com之类的工具来验证正则表达式,这有助于查找问题。也就是说,我把你的正则表达式粘贴在那里然后撞坏了铬,所以对于这样的野兽来说这可能不是很好的帮助:)