我需要在向量中与特殊模式匹配的某些元素上添加前缀。
内部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"
答案 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)