在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"
查看演示。
你可以试试
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"
我有一个形式为
的字符串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"
查看演示。
你可以试试
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"