我有一个由第三方提供给我的文件列表。我正在尝试从每个文件名中提取年龄组的名称。不幸的是,第三方对其文件的命名约定很差且不一致,我正在编写一段更大的代码来使用这些文件。我试图提取的这个年龄组字符串总是出现在"之前;。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"