当我使用 vim 时,我经常使用&
反向引用替换中的整个匹配项。例如,以下将“foo”的所有实例替换为“foobar”:
%s/foo/&bar/g
这里的好处是懒惰:我不必在匹配中输入括号,我只需要输入一个字符而不是两个用于替换中的反向引用。也许更重要的是,我在输入比赛时没有弄清楚我的后向参考,从而减少了认知负担。
&
在 R 的正则表达式中是否有与我在 vim 中使用的等效项(可能使用perl = T
参数)?
当我使用 vim 时,我经常使用&
反向引用替换中的整个匹配项。例如,以下将“foo”的所有实例替换为“foobar”:
%s/foo/&bar/g
这里的好处是懒惰:我不必在匹配中输入括号,我只需要输入一个字符而不是两个用于替换中的反向引用。也许更重要的是,我在输入比赛时没有弄清楚我的后向参考,从而减少了认知负担。
&
在 R 的正则表达式中是否有与我在 vim 中使用的等效项(可能使用perl = T
参数)?
在基本 R sub
/gsub
函数中:答案是否定的,请参阅此参考:
整体匹配没有替换文本标记。将整个正则表达式放在捕获组中,然后用于
\1
插入整个正则表达式匹配。
在stringr
包装中:是的,您可以使用\0
:
> library(stringr)
> str_replace_all("123 456", "\\d+", "START-\\0-END")
[1] "START-123-END START-456-END"
我们可以用gsubfn
library(gsubfn)
gsubfn("\\d+", ~paste0("START-", x, "-END"), "123 456")
#[1] "START-123-END START-456-END"