2015-11-18 51 views
-1

我在R數據框中有一些數據,如下所示。我試圖保留url並刪除一切,如果我得到url,否則保持列不變。R - 從文本中提取URL的正則表達式

的問題是,有可能是前導空格/沒有前導空格,*字符,結束超詞或$等等等等

kick-boxer.com 
easy hotel.com.my-kl s 
weebly-charge.com 
vietnamtouronsal e.com 
mes*wix.com*113963740 
borderlinx.com 
www.aliexpress.com 
www.aliexpress.com 
skr*skrill.com 

而且我不能夠在R設置佔有慾選項。基本上不要放棄我曾經擁有的角色。

gsub('(^|.*?|\\s+)(http\\:\\/\\/|https\\:\\/\\/)?([a-z0-9][a-z0-9\\-]*\\.)+(org|edu|com|co.sg|info)(.*?|$|\\s+)' ,'\\2\\3\\4\\5', test$url) 

問題是導致(^|.*?|\\s+)和尾隨(.*?|$|\\s+)由於.*貪婪地吃起來人物 - 離開我「a.com

什麼建議嗎?

+0

預期結果是什麼? – hwnd

+0

只是網站。在它之前和之後都剝去了一切。 – myloginid

+0

@myloginid你指的是*「問題」*,但不清楚究竟是什麼*「問題」*。你能指定它失敗的地方嗎? ...你用+加號重複第三組,並且反向引用將被該組的最後一次重複覆蓋,省略'\\ 3'中的文本,但是這似乎不是你想要的描述。 – Mariano

回答

0

發佈此信息可以使@ mylogind的評論可解析。

隨着測試數據

kick-boxer.com 
easy hotel.com.my-kl s 
weebly-charge.com 
vietnamtouronsal e.com 
mes*wix.com*113963740 
borderlinx.com 
www.aliexpress.com 
www.aliexpress.com 
skr*skrill.com 

並尋求僅提取適當的域,下面的多步溶液中提出的。

test$rem4 = gsub('(?i)(\*)' ,' * ', test$rem4) 
test$rem4 = gsub('(?i)^(.*)(\\.)([a-z]{2,6})(.*)$' ,'\\1\\2\\3 \\4', test$rem4) 
test$website1 = gsub('^(www\\.)?([a-z0-9]{2,}\\.)+(org|edu|com|co\\.sg|info|co\\.[a-z]{2}|sg|me|net)\\s+(.‌​*|$)' ,'\\1\\2\\3', test$rem4) 
test$website2 = gsub('^(.*)\\s+(www\\.)?([a-z0-9]{2,})(\\.)(org|edu|com|co\\.sg|info|co\\.[a-z]{2}|sg|me|n‌​et)$' ,'\\2\\3\\4\\5', test$rem4)  
test$website3 = gsub('^(.*)\\s+(www\\.)?([a-z0-9]{2,})(\\.)(org|edu|com|co\\.sg|info|co\\.[a-z]{2}|sg|me|n‌​et)\\s+(.*)$' ,'\\2\\3\\4\\5', test$rem4)