Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换R中字符串中H的第i个匹配项_R_Regex_Gsub - Fatal编程技术网

替换R中字符串中H的第i个匹配项

替换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捕获: ?

我尝试使用以下命令替换字符串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捕获: ?:[^H]*H{2}-除H以外的0+字符正好出现两次,后跟H,然后 [^H]*-0+除H以外的字符 H-一个字面值的H 使用\\1反向引用,存储在捕获的组1中的值将被放回替换结果中

对于sub,只执行1次搜索和替换操作,无需在gsub中执行

在PCRE正则表达式中也不需要,TRE模式也可以很好地工作