用正则表达式在R中的句点前和下划线或空格后提取字符串



我有一个由第三方提供给我的文件列表。我正在尝试从每个文件名中提取年龄组的名称。不幸的是,第三方对其文件的命名约定很差且不一致,我正在编写一段更大的代码来使用这些文件。我试图提取的这个年龄组字符串总是出现在"之前;。xls";文件扩展名,并跟在下划线或空格后面。我在R中尝试了许多不同的正则表达式来实现这一点,但我似乎无法理解(显然我对regex不太好(。

age_group <- c("abc_July2018_Dec2018__state_1864.xls",
"def_July2018_Dec2018__state_65.xls",
"ghi July2018 Dec2018 state overall.xls")

我期望的输出是一个包含:"1864", "65", "overall"的向量。

有人能帮我用R正则表达式来提取这些组吗?

或者使用包stringr:中的str_extract

str_extract(age_group, "(?<=_| )[^_ ]+(?=\.xls)")
[1] "1864"    "65"      "overall"

这利用了(?<=_| )中的正后方查找;匹配,如果你看到。。。在左边";,即_以及(?=\.xls)中的正向前瞻性;匹配,如果你看到。。。在右边";,即CCD_ 9之后是CCD_。基于左右两侧的这些限制,正则表达式将一次或多次匹配既不是_也不是空白的任何字符。

使用gsub

gsub(".*(_|\s)(.*).xls", "\2", age_group)
# [1] "1864"    "65"      "overall"

相关内容

  • 没有找到相关文章

最新更新