我有以下字符串列表:
name <- c("hsa-miR-555p","hsa-miR-519b-3p","hsa-let-7a")
我想要做的是上述每个字符串 用“zzz”替换第二个分隔符( - )后面的文本。 产量:
hsa-miR-zzz
hsa-miR-zzz
hsa-let-zzz
这样做的方法是什么?
答案 0 :(得分:3)
不妨使用类似的东西:
gsub("^((?:[^-]*-){2}).*", "\\1zzz", name)
(?:[^-]*-)
是一个非捕获组,由几个非短划线字符后跟一个短划线字符组成,而{2}
刚刚表示该组仅出现两次。然后,匹配其他所有内容以进行替换。注意我使用了一个锚,以防万一,以避免意外的替换。
答案 1 :(得分:2)
也许是这样的:
> gsub("([A-Za-z]+-)([A-Za-z]+-)(.*)", "\\1\\2zzz", name)
[1] "hsa-miR-zzz" "hsa-miR-zzz" "hsa-let-zzz"
实际上有几种方法可以解决这个问题,具体取决于你的表达式实际上是如何“常规”的。例如,他们都以“hsa-”开头吗? “中间”组有哪些选择?可能有三个以上的破折号?