使用gsub忽略R中的正则表达式

时间:2019-07-07 16:44:13

标签: r regex gsub

df <- data.frame(
    videos = c("Moon vs Grubby", "Moon vs Happy", "Happy vs Th00"),
    links = c("https://www.youtube.com/watch?v=QlNc-jb4ESk&t", "https://www.youtube.com/watch?v=VESO8YQVFSE", "https://www.youtube.com/watch?v=RI3IJT8ZzBM")
)

df$links <- as.character(df$links)
df$links <- gsub("watch?v=", "embed/", df$links)

我得到了以下代码,并带有指向YouTube的链接,我希望将它们嵌入闪亮的应用程序中。但是,YouTube需要替换被解释为正则表达式的字符串的一部分。我在这里找不到有用的解决方案。

那我该如何gsub

当前链接: https://www.youtube.com/watch?v=QlNc-jb4ESk&t

预期结果: https://www.youtube.com/embed/=QlNc-jb4ESk&t

2 个答案:

答案 0 :(得分:3)

我们需要转义?=,因为它们是元字符

gsub("watch\\?v\\=", "embed/=", df$links)

或带有fixed = TRUE

gsub("watch?v=", "embed/=", df$links, fixed = TRUE)

此外,由于只有一个实例,我们可以使用sub

sub("watch?v=", "embed/=", df$links, fixed = TRUE)
#[1] "https://www.youtube.com/embed/=QlNc-jb4ESk&t" 
#[2] "https://www.youtube.com/embed/=VESO8YQVFSE"  
#[3] "https://www.youtube.com/embed/=RI3IJT8ZzBM"  

答案 1 :(得分:2)

我的猜测是该表达式可能有效:

(\S*)watch\?v=(\S*)

该表达式在this demo的右上角进行了说明,如果您想进一步探索或修改它,在this link中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。

,我们的代码可能类似于:

gsub("(\\S*)watch\\?v\\=(\\S*)", "\\1embed/\\2", df$links)

我的猜测是这将是所需的输出:

https://www.youtube.com/embed/QlNc-jb4ESk&t