使用R语言stringr包提取文本8位数字码失败求助
解决8位数字提取失败的问题
你的问题出在正则表达式的单词边界\b上,它在部分场景下无法准确匹配独立的8位数字序列。比如示例中29932940后面紧跟-,虽然理论上存在单词边界,但这种匹配逻辑不够稳定。
修改方案
使用正向/反向否定断言替换单词边界,确保提取的是独立的8位数字(前后不能是数字),正则表达式改为(?<!\\d)\\d{8}(?!\\d)。
完整代码
library(stringr) dados_sivep_tratados$Teste <- ifelse( dados_sivep_tratados$NU_DO == 0 & !is.na(dados_sivep_tratados$OBSERVA), str_extract(dados_sivep_tratados$OBSERVA, "(?<!\\d)\\d{8}(?!\\d)"), NA )
正则说明
(?<!\\d):反向否定断言,确保8位数字的前一位不是数字,避免匹配更长数字的末尾部分\\d{8}:匹配连续8位数字(?!\\d):正向否定断言,确保8位数字的后一位不是数字,避免匹配更长数字的开头部分
这个正则能准确提取示例中的29932940,同时适配其他包含独立8位数字的场景。
内容的提问来源于stack exchange,提问作者Bruna Firmino
相关产品推荐
相关产品推荐

