【问题标题】:Extract parts of a string in R在R中提取字符串的一部分
【发布时间】:2015-09-19 11:13:37
【问题描述】:

我有一个表单字符串

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)的示例。

【问题讨论】:

  • 您是否希望输入字符串始终具有相同的宽度?
  • 你试过我帖子里的gsubstr_extract了吗?
  • 感谢@akrun,这正是我所需要的。
  • @TimBiegeleisen no - 字符数可能会改变(为什么我不能只使用 substr)

标签: regex r substring substr


【解决方案1】:

您可以简单地使用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

【讨论】:

    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 2020-12-18
      相关资源
      最近更新 更多