【问题标题】:Replacing part of delimited string with R's regex用 R 的正则表达式替换分隔字符串的一部分
【发布时间】:2013-07-10 07:10:26
【问题描述】:

我有以下字符串列表:

name <- c("hsa-miR-555p","hsa-miR-519b-3p","hsa-let-7a")

我想要做的是上面的每个字符串 将第二个分隔符 (-) 之后的文本替换为“zzz”。 产量:

hsa-miR-zzz
hsa-miR-zzz
hsa-let-zzz

有什么办法呢?

【问题讨论】:

    标签: regex string r


    【解决方案1】:

    不妨使用类似的东西:

    gsub("^((?:[^-]*-){2}).*", "\\1zzz", name)
    

    (?:[^-]*-) 是一个非捕获组,它由几个非短划线字符后跟一个短划线字符组成,紧随其后的{2} 表示该组只出现两次。然后,匹配其他所有内容以进行替换。请注意,我使用锚点是为了避免意外替换。

    【讨论】:

      【解决方案2】:

      大概是这样的:

      > gsub("([A-Za-z]+-)([A-Za-z]+-)(.*)", "\\1\\2zzz", name)
      [1] "hsa-miR-zzz" "hsa-miR-zzz" "hsa-let-zzz"
      

      实际上有几种方法可以解决这个问题,具体取决于您的表达实际上有多“常规”。例如,它们都以“hsa-”开头吗? “中间”组有哪些选择?可能有三个以上的破折号吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-20
        • 2017-11-27
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多