替换R中字符串中H的第i个匹配项
我尝试使用以下命令替换字符串AHBHCHEFHDGA中出现的第三个H替换R中字符串中H的第i个匹配项,r,regex,gsub,R,Regex,Gsub,我尝试使用以下命令替换字符串AHBHCHEFHDGA中出现的第三个H gsub("(?=H).{3}[H]", ".","AHBHCHEFHDGA" , perl = TRUE) 但是输出是AHBHC.DGA,它正在取代整个HEFH,有人能提供正确的解决方案吗?谢谢使用 sub("((?:[^H]*H){2}[^H]*)H", "\\1.","AHBHCHEFHDGA") ## -> [1] "AHBHC.EFHDGA" 见 详情: ?:[^H]*H{2}[^H]*-捕获组1捕获: ?
gsub("(?=H).{3}[H]", ".","AHBHCHEFHDGA" , perl = TRUE)
但是输出是AHBHC.DGA,它正在取代整个HEFH,有人能提供正确的解决方案吗?谢谢使用
sub("((?:[^H]*H){2}[^H]*)H", "\\1.","AHBHCHEFHDGA")
## -> [1] "AHBHC.EFHDGA"
见
详情:
?:[^H]*H{2}[^H]*-捕获组1捕获:
?:[^H]*H{2}-除H以外的0+字符正好出现两次,后跟H,然后
[^H]*-0+除H以外的字符
H-一个字面值的H
使用\\1反向引用,存储在捕获的组1中的值将被放回替换结果中
对于sub,只执行1次搜索和替换操作,无需在gsub中执行
在PCRE正则表达式中也不需要,TRE模式也可以很好地工作