在R中提取字符串的一部分

Extract parts of a string in R

我有一个形式为

的字符串
stamp = "section_d1_2010-07-01_08_00.txt"

并希望能够提取其中的部分内容。我已经能够通过使用重复 str_extract 到达我想要的部分来做到这一点,例如抢月

month = str_extract(stamp,"2010.+")
month = str_extract(month,"-..")
month = str_extract(month,"..$")

然而,这是非常低效的,必须有更好的方法。对于这个特定的例子,我可以使用

month = substr(stamp,17,18)

但是我正在寻找更通用的东西(以防位数发生变化)。

我想我需要正则表达式来获取某些标志(_ 或 -,或第三个 _ 等)之后的内容。我也尝试过使用 sub,但遇到了同样的问题,因为我需要几个来磨练我真正想要的东西。

我们将不胜感激如何获取月份(此处为 07)和小时(此处为 08)的示例。

您可以简单地使用 strsplit 与正则表达式 [-_]perl=TRUE 选项来获取所有部分。

stamp <- "section_d1_2010-07-01_08_00.txt"
strsplit(stamp, '[-_]')[[1]]
# [1] "section" "d1"      "2010"    "07"      "01"      "08"      "00.txt" 

查看演示。

https://regex101.com/r/cK4iV0/8

你可以试试

gsub('^.*_\d+-|-\d+_.*$', '', stamp)
#[1] "07"

一小时

library(stringr)
str_extract(stamp, '(?<=\d_)\d+(?=_\d)')
#[1] "08"

同时提取两者

 str_extract_all(stamp, '(?<=\d{4}[^0-9])\d{2}|\d{2}(?=[^0-9]\d{2}\.)')[[1]]
 #[1] "07" "08"