6

当我使用 vim 时,我经常使用&反向引用替换中的整个匹配项。例如,以下将“foo”的所有实例替换为“foobar”:

%s/foo/&bar/g

这里的好处是懒惰:我不必在匹配中输入括号,我只需要输入一个字符而不是两个用于替换中的反向引用。也许更重要的是,我在输入比赛时没有弄清楚我的后向参考,从而减少了认知负担。

&在 R 的正则表达式中是否有与我在 vim 中使用的等效项(可能使用perl = T参数)?

4

2 回答 2

7

在基本 R sub/gsub函数中:答案是否定的,请参阅此参考

整体匹配没有替换文本标记。将整个正则表达式放在捕获组中,然后用于\1插入整个正则表达式匹配。

stringr包装中:是的,您可以使用\0

> library(stringr)
> str_replace_all("123 456", "\\d+", "START-\\0-END")
[1] "START-123-END START-456-END"
于 2016-08-01T19:10:43.277 回答
0

我们可以用gsubfn

library(gsubfn)
gsubfn("\\d+", ~paste0("START-", x, "-END"), "123 456")
#[1] "START-123-END START-456-END"
于 2016-08-02T02:48:38.380 回答