在gsub R函数内使用&符(&)进行模式替换(对捕获组的反向引用)

时间:2019-06-26 22:11:49

标签: r regex backreference capture-group

我需要在向量中与特殊模式匹配的某些元素上添加前缀。

内部sed Unix命令中的&符号具有特殊含义(对捕获组的后向引用),我正在尝试在gsub R函数中获得类似的功能。 / p>

# create a small exemple
v1=c(1:10,"D")
# perform the command to add a preffix to vector elements
gsub("^[0-9]+","X.\\&",v1)

我得到的输出:

[1] "X.&" "X.&" "X.&" "X.&" "X.&" "X.&" "X.&" "X.&" "X.&" "X.&" "D"

我想要的输出:

[1] "X.1" "X.2" "X.3" "X.4" "X.5" "X.6" "X.7" "X.8" "X.9" "X.10" "D"

2 个答案:

答案 0 :(得分:2)

您似乎正在寻找捕获组后向引用的概念。

引用BSD sed手册

  

替换中出现的与号('&')被替换为   匹配RE的字符串。在这种情况下,“&”的特殊含义   可以通过在其前面加上反斜杠来对其进行抑制。字符串“ \#”,   其中“#”是数字,由与   对应的反向引用表达式

R不支持&版本,但支持\#
来自?regex

  

后向引用\ N,其中N = 1 ... 9,与子字符串匹配   先前与第N个带括号的子表达式匹配   正则表达式

所以你可以做

gsub("^([0-9]+)","X.\\1", v1)
#  [1] "X.1"  "X.2"  "X.3"  "X.4"  "X.5"  "X.6"  "X.7"  "X.8"  "X.9"  "X.10" "D" 

答案 1 :(得分:1)

您也可以在R正则表达式中使用反向引用。您只需使用方括号将模式分组:

gsub("(^[0-9]+)","X.\\1",v1)