在R

时间:2015-07-02 04:53:25

标签: regex r substring substr

我有一个表格

的字符串
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)

然而,我正在寻找更多功能的东西(如果数字的位数发生变化)。

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

如何说出月份(这里是07)和小时(这里是08)的例子将不胜感激。

2 个答案:

答案 0 :(得分:4)

您只需使用带有正则表达式perl=TRUEstamp <- "section_d1_2010-07-01_08_00.txt" strsplit(stamp, '[-_]')[[1]] # [1] "section" "d1" "2010" "07" "01" "08" "00.txt" 选项的Select userid, topicid, result from ( Select row_number() over (order by userid, topicid, result desc) row_id, userid, topicid, result FROM quiz ) t where row_id = 1 即可获取所有部分。

getPreferredSize()

参见演示。

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

答案 1 :(得分:2)

你可以尝试

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"