R - 正则表达式从文本中提取URL

时间:2015-11-18 06:35:50

标签: regex r

我在R数据框列中有一些数据,如下所示。我想保留url并删除其他所有内容,如果我得到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

有什么建议吗?

1 个答案:

答案 0 :(得分: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)