在句号之前和下划线或 space 之后使用 R 中的正则表达式提取字符串

Extract string with regex in R before period and following an underscore or space

我有一份第三方提供给我的文件列表。我正在尝试从每个文件名中提取年龄组名称。不幸的是,第三方的文件命名约定不佳且不一致,我正在编写更大的代码来使用这些文件。我试图提取的这个年龄组字符串总是出现在“.xls”文件扩展名之前,并且跟在下划线或 space 之后。我在 R 中尝试了许多不同的正则表达式来执行此操作,但我似乎无法弄清楚(显然我对正则表达式不是很好)。

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 正则表达式来提取这些组?

使用 gsub.

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

或使用包 stringr 中的 str_extract:

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

这利用了 (?<=_| ) 中的正向后视,它可以被修饰为“如果你在左边看到......则匹配”,即 _ (?=\.xls) 中的正前瞻性,可解释为“如果您在右侧看到...则匹配”,即 . 后跟 xls。 基于对左右的这些限制,正则表达式匹配任何字符一次或多次,既不是 _ 也不是空格 .