为何在R语言str_replace中使用分组捕获未得到预期结果?
问题原因及解决方法
为什么str_replace返回原字符串?
你写的str_replace(a, "(?<=year1)(.*)", '\\1')逻辑是:找到year1之后的所有内容(也就是126.81 - 139.90),然后把这段内容替换成它自己(\\1就是捕获到的这段内容)。相当于做了一次无意义的“自我替换”,所以整个字符串和原内容完全一致。
str_replace和str_extract的核心逻辑完全不同:
str_extract是直接从字符串中找出符合正则规则的部分并返回;str_replace是找到符合正则规则的片段,用新内容替换这个片段,未匹配的部分会原样保留。
用str_replace实现提取的正确写法
如果想用str_replace得到目标内容,有两种可行思路:
思路1:替换掉目标内容之前的所有部分
匹配year1及之前的所有字符,替换为空字符串:
str_replace(a, ".*year1", "") # 输出:[1] "126.81 - 139.90"
思路2:捕获目标内容,替换整个字符串为捕获组
用正则匹配整个字符串,把目标内容放进捕获组,然后替换整个字符串为捕获组的内容:
str_replace(a, ".*year1(.*)", "\\1") # 输出:[1] "126.81 - 139.90"
内容的提问来源于stack exchange,提问作者zhiwei li
相关产品推荐
相关产品推荐

