【问题标题】:hash tags regex, keep # in url主题标签正则表达式,在 url 中保留 #
【发布时间】:2014-08-02 15:09:34
【问题描述】:

我想使用 R 的正则表达式从推文中提取哈希标签(我想将其保留在基础 R 中,但欢迎其他解决方案为未来的搜索者提供稳健的答案)。

我有一个正则表达式,我认为它会删除哈希标签,但发现了一个极端情况,即 url 中有一个 #,如下面的 MWE 所示。 如何删除文本中的井号标签但保留 URL 中的 #?

这是一个 MWE 和我尝试过的代码:

text.var <- c("Slides from great talk: @ramnath_vaidya: Interactive slides from Interactive Visualization", 
    "presentation #user2014. http://ramnathv.github.io/user2014-rcharts/#1")

gsub("#\\w+", "", text.var)
gsub("#\\S+", "", text.var)

所需的输出是:

[1] "Slides from great talk: @ramnath_vaidya: Interactive slides from Interactive Visualization"
[2] "presentation . http://ramnathv.github.io/user2014-rcharts/#1"

注意 R 的正则表达式与其他正则表达式类似,但是是 R 特有的。这个问题是 R 的正则表达式特有的,而不是一般的正则表达式问题。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    好吧,对于这个特定案例,您可以使用Negative Lookbehind 断言。

    gsub('(?<!/)#\\w+', '', text.var, perl=T)
    # [1] "Slides from great talk: @ramnath_vaidya: Interactive slides from Interactive Visualization"
    # [2] "presentation . http://ramnathv.github.io/user2014-rcharts/#1" 
    

    或者您可以使用PCRE 提供的一些黑魔法:

    gsub('http://\\S+(*SKIP)(*F)|#\\w+', '', text.var, perl=T)
    # [1] "Slides from great talk: @ramnath_vaidya: Interactive slides from Interactive Visualization"
    # [2] "presentation . http://ramnathv.github.io/user2014-rcharts/#1"    
    

    这里的想法是跳过任何以http:// 开头的网址,您可以根据需要对其进行调整。

    在交替运算符的左侧,我们匹配一个 url 使子模式失败,强制正则表达式引擎不使用回溯控制重试子字符串字符串中的下一个位置。交替运算符的右侧与我们想要的匹配...

    【讨论】:

    • 感谢您提供有效的解决方案和好评的解决方案。
    猜你喜欢
    • 2021-06-20
    • 2021-02-17
    • 1970-01-01
    • 2011-03-05
    • 2015-01-04
    • 1970-01-01
    • 2012-05-06
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多