R语言stringr包str_extract函数语义逻辑及字符串提取用法咨询
str_extract(stringr包)核心使用逻辑与场景实现
基础语义规则
- 核心功能:接收字符向量与正则匹配规则,返回每个输入元素中第一个命中规则的子串,输出向量长度与输入完全对齐
- 匹配逻辑:遵循贪婪匹配原则,从字符串最左端点开始逐位探测,找到第一个能完整满足正则条件的最长子串即停止匹配
- 异常处理:未命中匹配规则的位置默认返回
NA_character_,不会抛出运行时错误 - 可选参数
group:当正则设置了多段捕获组时,可通过该参数直接指定要提取的组序号,无需额外做二次字符串截取
同族函数边界差异
str_extract_all():返回每个输入元素中所有命中规则的子串,输出为列表结构str_match()/str_match_all():匹配后直接返回捕获组的结构化结果,适合一次拆分多个字段的场景
对应场景的可落地实现
针对11_3_S11.html这类需要提取首个下划线后、下一个下划线前数字的需求,直接运行以下代码即可得到目标值3:
library(stringr) files = c("11_3_S11.html") str_extract(files, "(?<=_)[0-9]+(?=_)")
用到的正则规则拆解
(?<=_):零宽正向回顾后发,要求匹配位置的前置字符为下划线,本身不占用匹配长度[0-9]+:连续匹配1个及以上数字字符(?=_):零宽正向先行断言,要求匹配位置的后置字符为下划线,同样不占用匹配长度
如果场景允许不严格匹配后置下划线,仅需要提取第一个下划线后的连续数字,可将正则简化为(?<=_)[0-9]+,运行结果完全一致。
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

