1

我有以下字符串列表:

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

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

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

有什么办法呢?

4

2 回答 2

3

不妨使用类似的东西:

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

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

于 2013-07-10T08:13:52.993 回答
2

也许是这样的:

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

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

于 2013-07-10T07:13:25.147 回答