regex 如何在gsub中正确使用替换字符串中的反向引用?

ndh0cuux  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(89)

我对R中gsub的行为有点困惑,我正在使用它来重命名data.table中的变量。我希望任何以.y结尾的变量都被重命名为以c_开头。但是,我得到以下输出:

> gsub('[.]*\\.y', 'c_\\1', c('v1.y', 'v1'))
[1] "v1c_" "v1"

字符串
我本以为

> gsub('[.]*\\.y', 'c_\\1', c('v1.y', 'v1'))
[1] "c_v1" "v1"


我在SO上看到了很多关于gsub和反向引用的问题,但是,似乎没有一个能解释这个令人惊讶的(对我来说)行为。谢谢你的见解。

qco9c6ql

qco9c6ql1#

要使用反向引用,您需要有一个捕获组。试试这个-

sub('(.*)\\.y$', 'c_\\1', c('v1.y', 'v1'))
#[1] "c_v1" "v1"

字符串
捕获组(.*)捕获".y"之前的所有内容并将其追加到"c_"。对于不以".y"结尾的字符串,输出不变。

相关问题