R语言str_extract如何提取指定字符后的内容(不含该字符)
R中提取$符号后字符串内容的解决方案
问题复现
- 目标字符串:
s13$C6:C7 - 提取要求:仅获取
$之后的C6:C7片段,结果不能包含$本身 - 错误尝试代码:
str_extract("s13$C6:C7", '((\\$)=?).*')
该写法返回结果开头携带$符号,不符合要求。
错误原因
当前正则将$符号纳入了匹配范围,最终返回的匹配结果自然会包含$本身。
可行实现方法
方法1:零宽后行断言正则(最贴合str_extract用法)
直接通过正则定位到$符号后的位置,不将$纳入匹配结果:
library(stringr) str_extract("s13$C6:C7", '(?<=\\$).*')
运行后直接返回
C6:C7,符合预期。其中(?<=\\$)是正向零宽后行断言,仅做位置校验、不匹配实际字符,后续.*会匹配$后的全部内容。
方法2:sub替换法(无需依赖stringr包)
用基础R的字符串替换函数,把字符串开头到$(含$)的所有内容替换为空:
sub(".*\\$", "", "s13$C6:C7")
方法3:捕获组提取法
通过括号捕获目标片段,提取对应分组内容:
library(stringr) str_match("s13$C6:C7", '\\$(.*)')[,2]
内容的提问来源于stack exchange,提问作者Zach Fara
相关产品推荐
相关产品推荐

