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

Regex 用R的正则表达式替换部分分隔字符串,regex,string,r,Regex,String,R,我有以下字符串列表: name <- c("hsa-miR-555p","hsa-miR-519b-3p","hsa-let-7a") 怎么做?可能是这样的: > gsub("([A-Za-z]+-)([A-Za-z]+-)(.*)", "\\1\\2zzz", name) [1] "hsa-miR-zzz" "hsa-miR-zzz" "hsa-let-zzz" 实际上有几种方法可以实现这一点,具体取决于表达式的实际正则性。例如,它们是否都以hsa-开头?中间群体有哪些选择?可

我有以下字符串列表:

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

怎么做?

可能是这样的:

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

实际上有几种方法可以实现这一点,具体取决于表达式的实际正则性。例如,它们是否都以hsa-开头?中间群体有哪些选择?可能有三个以上的破折号吗?

可能是这样的:

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

实际上有几种方法可以实现这一点,具体取决于表达式的实际正则性。例如,它们是否都以hsa-开头?中间群体有哪些选择?可能会有三个以上的破折号吗?

也可以使用类似于:

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

?:[^-]*-是一个非捕获组,由几个非破折号字符和一个破折号字符组成,紧跟其后的{2}表示该组仅出现两次。然后,匹配替换的所有其他内容。注:我使用了一个锚,以防意外替换。

也可以使用类似于:

gsub("^((?:[^-]*-){2}).*", "\\1zzz", name)
?:[^-]*-是一个非捕获组,由几个非破折号字符和一个破折号字符组成,紧跟其后的{2}表示该组仅出现两次。然后,匹配替换的所有其他内容。注:我使用了一个锚,以防意外替换