2013-07-10 47 views
1

我有一個字符串以下列表:更換部分

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

我想要做的就是上述每個串 的更換第二分隔符之後的文本( - )用「 ZZZ」。 產量:

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

這是怎麼回事?

回答

2

也許是這樣的:

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

實際上,有幾種方法可以解決這個,這取決於你的表情實際上是如何「正規」的。例如,他們是否都以「hsa-」開頭? 「中間」組有什麼選擇?可能會有三個以上的破折號?

3

還不如使用這樣的:

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

(?:[^-]*-)是一個非捕獲基團,其由幾個非破折號字符,隨後是單個連字符和{2}剛過意味着只有兩次出現此組。然後,與替代品的其他一切相匹配。注意我使用了一個錨以防萬一以避免意外的替換。