Is there an equivalent of “&” in R's regular expressions for backreference to entire match?

人走茶凉 提交于 2020-05-08 08:13:26

问题


When I use vim, I often use & to backreference the entire match within substitutions. For example, the following replaces all instances of "foo" with "foobar":

%s/foo/&bar/g

The benefit here is laziness: I don't have to type the parenthesis in the match and I only have to type one character instead of two for the backreference in the substitution. Perhaps more importantly, I don't have figure out my backrefrences while I'm typing my match, reducing cognitive load.

Is there an equivalent to the & I'm using in vim within R's regular expressions (maybe using the perl = T argument)?


回答1:


In base R sub/gsub functions: The answer is NO, see this reference:

There is no replacement text token for the overall match. Place the entire regex in a capturing group and then use \1 to insert the whole regex match.

In stringr package: YES you can use \0:

> library(stringr)
> str_replace_all("123 456", "\\d+", "START-\\0-END")
[1] "START-123-END START-456-END"



回答2:


We can use gsubfn

library(gsubfn)
gsubfn("\\d+", ~paste0("START-", x, "-END"), "123 456")
#[1] "START-123-END START-456-END"


来源:https://stackoverflow.com/questions/38706077/is-there-an-equivalent-of-in-rs-regular-expressions-for-backreference-to-en

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!