【发布时间】: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
有什么办法呢?
【问题讨论】:
我有以下字符串列表:
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-”开头吗? “中间”组有哪些选择?可能有三个以上的破折号吗?
【讨论】: