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