gpt4 book ai didi

regex - 标签正则表达式,在 url 中保留#

转载 作者:行者123 更新时间:2023-12-01 10:46:56 30 4
gpt4 key购买 nike

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

我有一个我认为会删除散列标签的正则表达式,但发现了当 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 的正则表达式,而不是一般的正则表达式问题。

最佳答案

好吧,对于这个特定 案例,您可以使用 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,您可以根据需要对其进行调整。

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

关于regex - 标签正则表达式,在 url 中保留#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096420/

30 4 0