2015-10-22 24 views
0

我有一个包含n行的文本文件,每行都是一个字符串。如何用R中的文本字符串查找/替换所有的URL /链接使用正则表达式

我想将其导入R并使用正则表达式从(具体地)以http开始依次删除所有URL。

下一个交互式的正则表达式检查中工作(重新设计器Emacs的),而不是在R

gsub("http:.*?[([:space:])| |\n]", "", x)) 

注意

这个问题,并在下面干我的答案给出从this question正则表达式引擎及其相互之间的兼容性。

回答

0

我的解决方案如下:

output <- sapply(input, FUN = function(x) gsub("http\\S+\\s*", "", x)) 
  • sapply执行功能小号暗示在数据帧的每行(在我的情况)。
  • gsub使用正则表达式来查找每一个环节,并删除它,用什么将其代:""
  • 的正则表达式:"http\\S+\\s*"

    1. “HTTP” 内input认定的 “HTTP” 所有出现
    2. “\ S +”从http继续通过所有非空白字符
    3. “\ s *”在找到一个或多个空白字符时结束搜索
  • x仅仅是输入,该函数定义FUN指向sapply函数内。

我觉得主要带走(对我来说,至少)用双反斜线内R.例如,使用下面的正则表达式,我能内Emacs的交互式删除所有URL的使用正则表达式检查器(Emacs的命令:M-x re-builder),但不是在R:

"http:.*?[([:space:])| |\n]" 

我不是我自己知道如何做到这一点的测试正则表达式的表达式交互与目标文字许多免费onlinetools,但R使用其自己的正则表达式的味道。 可以使用Perl(版本5.x)的正则表达式引擎,但是我的答案可以避免这种情况。

在解释这一切时,this thread中的简短讨论可能证明是有用的。

+1

在SO中有很多答案描述了在R-regex模式参数中需要加倍反斜杠。我建议删除这个答案(这将失败与https和ftp网址)和问题,因为我真的不认为他们添加任何东西,而不是证明你没有阅读''正则表达式'非常仔细,并没有工作在'?sub'中的例子。 –

+0

虽然我同意你写的大部分内容,但我确实说过我只需要带有http的URL - 而不是ftp - 并且我担心你错了,它能为'https'工作。而且,像我这样的非程序员并不总是可以简单地阅读帮助或小插图并理解所有内容,特别是类似正则表达式的东西。我想我的答案有助于像我一样帮助需要和结果的人。我花了很长时间找到这个答案,现在别人不需要。当你不一定知道要搜索什么时,很难找到所有的东西。我会使我的OP更清晰/更具体。 –

相关问题