使用正则表达式从定界数组中提取第n个字符

问题描述 投票:0回答:1

我有一列,每条记录包含多个行业代码,用逗号分隔,并且每个行业代码的长度都不同(从2到6位数字)。我的数据框中的一条记录如下所示:

naics <- c("5413, 541410, 11, 23611, 23, 611")

我希望能够根据每个单元中的字符数创建一个新数组。例如,这里我仅提取四位数的数字字符:

naics.four.digit <- unlist(str_extract_all(naics, "[0-9]{4}+"))
naics.four.digit
[1]"5413" "5414" "5414" "5416" "6117"

如上所述,我使用了str_extract_all,该方法效果很好。但是,一旦我尝试提取3位和2位字符,此方法就会失效。

naics.three.digit <- unlist(str_extract_all(naics, "[0-9]{3}+"))
naics.three.digit
[1]"541" "541" "410" "236" "611"

这里实际的期望输出是:

"541" "541" "236" "611"

类似地,对于两位数的输出,应该是:

"54" "54" "11" "23" "23" "61"

我假设str_extract_all方法在这里分解,因为每个子串的长度都不同。有没有解决方法?任何帮助或指导表示赞赏。

r regex stringr
1个回答
1
投票

我们可以在\\b中使用单词边界\\d{3}后跟3个数字(str_extract_all)作为模式,它会跳过少于3个数字的数字

library(stringr)
str_extract_all(naics, "\\b\\d{3}")[[1]]
#[1] "541" "541" "236" "611"
© www.soinside.com 2019 - 2024. All rights reserved.