2014-03-04 37 views
0

我使用正则表达式的下列线这是我从this SO answer发现:为什么这行正则表达式捕获空白?

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

我在以下字符串上测试它:

“Quattro Amici将于2014年3月3日举行音乐会。长期合作者Lun Jiang,小提琴;罗伯塔Zalkind,中提琴; Pegsoon Whang,大提琴;和钢琴家Karlyn Bond将演奏弗兰茨约瑟夫海顿,沃尔夫冈阿马多伊斯莫扎特,路德维希范贝多芬和加布里埃尔福雷的作品。要购买门票,请访问westminstercollege.edu/culturalevents或致电801-832-2457。 - 多见于:http://entertainment.sltrib.com/events/view/quattro_amici_in_concert#sthash.QRsLXXiA.dpuf

我只是试图提取字符串URL和基于一堆SO答案,我发现正则表达式是该作业的推荐工具,我不一个正则表达式的专家(或者我的理解中的中间),所以我对re.findall()一直返回的空字符串感到困惑,我已经使用正则表达式队列中的正则表达式行,并且仍然没有运气。非常感激

+0

长度超过40-80个字符的正则表达式是[垃圾表达式](http: //blog.codinghorror.com/regular-expressions-now-you-have-two-problems/)(根据我和其他人的说法)。 –

回答

1

我不知道,象这样的一个大的正则表达式是完全必要的 - 如果你只是希望得到的链接,你可以使用一个更简单的正则表达式,像这样:

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

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

您还可以使用像regexpal.com这样的工具来验证正则表达式,这有助于查找问题。这就是说,我在那里粘贴了你的正则表达式,它崩溃了铬,所以它可能不是一个很好的帮助:)

+0

如果你对你的文章中的大人物的来源感兴趣,下面是引用它的原始博客文章:http://daringfireball.net/2010/07/improved_regex_for_matching_urls - 除非你的数据集非常大且不可预测然而,它是过度的IMO。即使作者已经做出了更具体的正则表达式,你在这个案例中寻找的正是这个:https://gist.github.com/gruber/8891611 – Jesse

相关问题