我尝试使用以下命令替换字符串“AHBHCHEFHDGA”中第3次出现的H
gsub("(?=H).{3}[H]", ".","AHBHCHEFHDGA" , perl = TRUE)
但输出是“AHBHC.DGA”,它取代了整个“HEFH”,有人可以提供正确的解决方案吗?感谢
答案 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]*
H
- 文字H
使用H
反向引用,存储在捕获的组#1中的值将被放回到替换结果中。
使用\\1
,只需执行1次搜索和替换操作,sub
无需执行。
也不需要PCRE正则表达式,TRE模式也能正常运行。