r - 将函数应用于 R 中 gsub 中的反向引用

标签 r backreference

我是 R 的新手,并且坚持使用似乎不起作用的反向引用。在:

gsub("\\((\\d+)\\)", f("\\1"), string)

它正确地获取括号之间的数字,但没有应用(正确定义,否则工作)函数 f 来替换数字 --> 它实际上是传递给 f 的字符串“\1”。

我错过了什么还是只是 R 不处理这个?如果是这样,知道如何做类似的事情,即将函数“即时”应用于我正在解析的文本中括号之间的(实际上是许多)数字?

非常感谢你的帮助。

最佳答案

R 没有通过 gsub 将函数直接应用于匹配项的选项.您实际上必须提取匹配项,转换值,然后替换该值。这对于 regmatches 来说相对容易功能。例如

x<-"(990283)M (31)O (29)M (6360)M"

f<-function(x) {
    v<-as.numeric(substr(x,2,nchar(x)-1))
    paste0(v+5,".1")
}

m <- gregexpr("\\(\\d+\\)", x)
regmatches(x, m) <- lapply(regmatches(x, m), f)
x
# [1] "990288.1M 36.1O 34.1M 6365.1M"

当然你可以做f做任何你喜欢的事情,只要确保它是矢量友好的。当然,您可以将其包装在您自己的函数中
gsubf <- function(pattern, x, f) {
    m <- gregexpr(pattern, x)
    regmatches(x, m) <- lapply(regmatches(x, m), f)
    x   
}
gsubf("\\(\\d+\\)", x, f)

请注意,在这些示例中,我们没有使用捕获组,我们只是抓取整个匹配项。有一些方法可以提取捕获组,但它们有点麻烦。如果您想提供一个需要进行此类提取的示例,我可能会想出一些更好的方法。

关于r - 将函数应用于 R 中 gsub 中的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506540/

相关文章:

regex - 在 PostgreSQL 中匹配部分反向引用

c# - 是否可以使用匹配结果的反向引用作为另一个捕获组的匹配?

r - 如何在 R 中计算变差函数时更改滞后距离

r - 如何在R Markdown中的biblatex中更改引用样式?

r - 使用 root 安装的 R 包的问题

r - 在 Shiny 中为 sliderInput 定义特定范围的值

regex - Perl 正则表达式多重匹配

python - 无法让 Python 正则表达式反向引用发挥作用

javascript - 如何忽略 javascript 中的 $1 替换反向引用

r - 如果索引值接近另一个 df 中的索引,有没有办法从 df 中提取数据?