2011-06-16 76 views
5

給定一個文本,我想刪除url部分並留下其他文本。使用ruby從文本中刪除url

例子:

'bla bla bla... bla bla bla... http://bit.ly/someuri bla bla bla...' 

成爲

'bla bla bla... bla bla bla... bla bla bla...' 

有任何Ruby構建方法有效地做到這一點?

+0

你能保證網址內不會有空格嗎? – Locksfree 2011-06-16 07:52:19

+0

文本是由用戶輸入的,所以我主要關心的是刪除任何類似於url的內容直到下一個空格。 ''http://bit.ly/帶空格的網址'將變成''帶空格的網址' – 2011-06-16 08:06:51

回答

9

嘗試用正則表達式:

(?:f|ht)tps?:\/[^\s]+ 
+2

@Donny Kurnia讓你說你的字符串在變量'str'中,那麼你可以使用@The Mask的正則表達式像這樣:'new_str = str.gsub(/(?:f | ht)tps?:\/[^ \ s] + /,'')'或者如果你想'str'本身改變你可以做'str .gsub!(/(?:f | ht)tps?:\/[^ \ s] + /,'')' – 2011-06-16 09:00:16

+0

@DhruvaSagar上面的答案在我的失敗的地方工作。 @ inbound_text.gsub!(/ /m,'')。爲什麼?很好的答案。 – Angela 2016-06-06 14:23:02

4

我剛剛發現Regular Expression - replace word except within a URL/URI並修改代碼是這樣的:

URI_REGEX = %r"((?:(?:[^ :/?#]+):)(?://(?:[^ /?#]*))(?:[^ ?#]*)(?:\?(?:[^ #]*))?(?:#(?:[^ ]*))?)" 

def remove_uris(text) 
    text.split(URI_REGEX).collect do |s| 
    unless s =~ URI_REGEX 
     s 
    end 
    end.join 
end 

我在鐵軌控制檯測試它和它的工作如預期:

remove_uris('bla bla bla... bla bla bla... http://bit.ly/someuri bla bla bla...') 
=> "bla bla bla... bla bla bla... bla bla bla..." 

如果有人有更好的/有效的解決方案,我會投票或接受它。謝謝。

+0

text.gsub!(URI_REGEX,'')怎麼辦? – nex 2014-04-14 16:05:25

+0

感謝您的評論,@nex。我會試試看。 – 2014-04-15 12:38:27

+0

請注意,這不起作用100%。考慮以下文字:''تفاصيلتغطية\ n#lexusriyadhlargestglobally \ n#لكزس_الرياض_الأكبر_في_العالم\ nتجدونهاهنا\ nhttp://example.com \ n http://example.com「'阿拉伯文字和表情符號的某些部分被忽略 – mreq 2016-05-13 16:19:39