如何使用stringr的str_extract在mutate中提取以rs开头以数字结尾的子串
正则表达式理解误区说明
你使用的正则^rs*\\d$返回NA,核心是3个正则语法的理解偏差:
*量词的作用理解错误:*是匹配其前方紧邻的单个字符0次及以上,并非你误以为的“匹配任意内容”通配符。你写的rs*实际匹配逻辑是「字符r后接0个或多个s」,可以命中r、rs、rss等,完全不涉及对数字的匹配规则。- 数字匹配没有加对应量词:
\\d仅能匹配单个数字字符,你需要提取的1234是4个连续数字,未加量词的情况下只能匹配rs后仅接1位数字的场景。 - 结束锚点
$误用:$表示匹配内容必须位于整个字符串的末尾,你要提取的rs1234后还有-<b>C</b>的剩余内容,加了$后正则要求从字符串开头到结尾全量匹配,自然不可能命中目标子串。
参考修正写法(仅作为误区理解的验证)
要提取rs开头后接连续数字的子串,正则可写为^rs\\d+,测试如下:
str_extract("rs1234-<b>C</b>","^rs\\d+") # 输出 [1] "rs1234"
内容的提问来源于stack exchange,提问作者monotonic
相关产品推荐
相关产品推荐

