替换R中字符串中的第i个H的出现

时间:2017-02-01 21:08:03

标签: r regex gsub

我尝试使用以下命令替换字符串“AHBHCHEFHDGA”中第3次出现的H

gsub("(?=H).{3}[H]", ".","AHBHCHEFHDGA" , perl = TRUE)

但输出是“AHBHC.DGA”,它取代了整个“HEFH”,有人可以提供正确的解决方案吗?感谢

1 个答案:

答案 0 :(得分:1)

使用

sub("((?:[^H]*H){2}[^H]*)H", "\\1.","AHBHCHEFHDGA")
## -> [1] "AHBHC.EFHDGA"

请参阅R demo

<强>详情:

  • ((?:[^H]*H){2}[^H]*) - 捕获组#1捕获:
    • (?:[^H]*H){2} - 除H以外的{0}字符后恰好出现2次0 +字符,然后是
    • H - 除[^H]*
    • 以外的0个字符
  • H - 文字H

使用H反向引用,存储在捕获的组#1中的值将被放回到替换结果中。

使用\\1,只需执行1次搜索和替换操作,sub无需执行。

也不需要PCRE正则表达式,TRE模式也能正常运行。