【问题标题】:Using ampersand (&) inside gsub R function for pattern replacement (backreference to capture group)在 gsub R 函数中使用与号 (&) 进行模式替换(对捕获组的反向引用)
【发布时间】:2019-11-08 21:59:54
【问题描述】:

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

sedUnix 命令和符号内部有特殊含义(反向引用捕获组),我试图在gsubR 函数中获得类似的功能。

# create a small example
v1=c(1:10,"D")
# perform the command to add a prefix 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"

【问题讨论】:

    标签: r regex backreference capture-group


    【解决方案1】:

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

    引用 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" 
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-30
        • 1970-01-01
        • 2022-08-02
        • 2012-10-30
        • 2017-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多