在 R 的正则表达式中是否有等价于“&”的反向引用整个匹配项?
Is there an equivalent of "&" in R's regular expressions for backreference to entire match?
当我使用 vim 时,我经常使用 &
在替换中反向引用整个匹配项。例如,以下将 "foo" 的所有实例替换为 "foobar":
%s/foo/&bar/g
这里的好处是懒惰:我不必在匹配中键入括号,而且我只需键入一个字符而不是两个字符作为替换中的反向引用。也许更重要的是,我在输入匹配项时没有弄清楚我的反向引用,从而减少了认知负担。
R 的正则表达式中是否有与我在 vim 中使用的 &
等效的东西(可能使用 perl = T
参数)?
在基础 R sub
/gsub
函数中:答案是 NO,参见 this reference:
There is no replacement text token for the overall match. Place the entire regex in a capturing group and then use </code> to insert the whole regex match.</p>
</blockquote>
<p><strong>In <code>stringr
package: YES 你可以使用 [=15=]
:
> 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"
当我使用 vim 时,我经常使用 &
在替换中反向引用整个匹配项。例如,以下将 "foo" 的所有实例替换为 "foobar":
%s/foo/&bar/g
这里的好处是懒惰:我不必在匹配中键入括号,而且我只需键入一个字符而不是两个字符作为替换中的反向引用。也许更重要的是,我在输入匹配项时没有弄清楚我的反向引用,从而减少了认知负担。
R 的正则表达式中是否有与我在 vim 中使用的 &
等效的东西(可能使用 perl = T
参数)?
在基础 R sub
/gsub
函数中:答案是 NO,参见 this reference:
There is no replacement text token for the overall match. Place the entire regex in a capturing group and then use
</code> to insert the whole regex match.</p> </blockquote> <p><strong>In <code>stringr
package: YES 你可以使用[=15=]
:> 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"