【问题标题】:How to find/replace all URLs/links from a text strings in R using regex如何使用正则表达式从 R 中的文本字符串中查找/替换所有 URL/链接
【发布时间】:2015-10-22 15:35:39
【问题描述】:

我有一个包含n 行的文本文件,每一行都是一个字符串。

我想将其导入 R 并使用正则表达式依次删除(特别是)以http 开头的所有 URL。

以下内容在交互式正则表达式检查器(Emacs 中的重新构建器)中有效,但在 R 中无效。

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

注意

这个问题和我在下面给出的答案源于this question 关于正则表达式引擎及其相互兼容性。

【问题讨论】:

    标签: regex r parsing emacs


    【解决方案1】:

    我的解决方法如下:

    output <- sapply(input, FUN = function(x) gsub("http\\S+\\s*", "", x))
    
    • sapply 对数据框的每一行执行一个函数Simply(在我的例子中)。
    • gsub 使用正则表达式查找每个链接并将其删除,方法是将其替换为 nothing""
    • 正则表达式:"http\\S+\\s*"

      1. “http”在input中查找所有出现的“http”
      2. "\S+" 继续从 http 到所有非空白字符
      3. “\s*”在找到一个或多个空白字符时结束搜索
    • 结尾的x 只是函数定义FUNsapply 函数中指向的输入。

    我认为主要的收获(至少对我而言)是在 R 中使用双 反斜杠。例如,使用以下正则表达式,我能够删除 Emacs 中的所有 URL交互式正则表达式检查器(Emacs 命令:M-x re-builder),但不在 R 中:

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

    我自己不确定如何做到这一点,因为与目标文本交互测试正则表达式是很多免费的onlinetools,但 R 使用它自己的正则表达式。 可以使用 Perl(5.x 版)正则表达式引擎,但我在下面的回答避免了这种情况。

    this thread 中的简短讨论可能有助于解释这一切。

    【讨论】:

    • SO 中有很多答案描述了在 R-regex 模式参数中需要加倍反斜杠。我建议删除这个答案(这将因 https 和 ftp URL 而失败)和问题,因为除了证明您没有非常仔细地阅读 ?regex 并且没有通过?sub 中的示例。
    • 虽然我同意你写的大部分内容,但我确实说过我只想要带有 http 的 URL - 而不是 ftp - 恐怕你错了,它确实适用于 https。此外,像我这样的非程序员并不总是能够简单地阅读 ?help 或小插图并理解所有内容,尤其是像正则表达式这样的东西。我认为我的回答有助于帮助像我一样需要和结果的人。我花了很长时间才找到这个答案,现在其他人不需要。当您不一定知道要搜索什么时,很难在 SO 上找到所有内容。我会调整我的 OP,使其更清晰/更具体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2021-05-18
    相关资源
    最近更新 更多