2014-03-04 57 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

相關問題