【问题标题】:Extracting every nth character from delimited array using regex使用正则表达式从分隔数组中提取每个第 n 个字符
【发布时间】:2019-11-18 19:40:22
【问题描述】:

我有一列,每条记录包含多个行业代码,用逗号分隔,每个都有不同的长度(从 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 方法在这里失效,因为每个子字符串都有不同的长度。有解决方法吗?感谢您提供任何帮助或指导。

【问题讨论】:

  • 锚定 \b\d{3}\b 或拆分 , 并修剪,然后 ^\d{3}$ 或长度 == 3

标签: r regex stringr


【解决方案1】:

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

library(stringr)
str_extract_all(naics, "\\b\\d{3}")[[1]]
#[1] "541" "541" "236" "611"

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多