用R的正则表达式替换分隔字符串的一部分

时间:2013-07-10 07:10:27

标签: regex string r

我有以下字符串列表:

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

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

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

这样做的方法是什么?

2 个答案:

答案 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-”开头吗? “中间”组有哪些选择?可能有三个以上的破折号?