【问题标题】:String extraction with regular expression in R在R中使用正则表达式提取字符串
【发布时间】:2021-11-28 22:05:08
【问题描述】:

我正在尝试使用 R 中的正则表达式从文件名中提取大量信息。当我匹配模式时,str_view() 正在向我显示正确的字符串集。然而,当我试图将它们分拆并提取剩余部分时,它不起作用。我也试过 str_extract() 但它不起作用。我做错了什么?

fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"

fext <- tools::file_path_sans_ext(fname)

stringr::str_view(fext, ".*-ASG_\\d+_", match = TRUE)

P_num <- gsub(".*-ASG_\\d{2}_", "", fext)

P_num <- stringr::str_extract(fname, "(?<=-ASG_\\d+)([^_])*(?=\\.tab)")

【问题讨论】:

  • fname 是您的输入字符串。你的预期输出是什么?
  • 我的预期输出是最后五位数字。这个问题有点误导。正如我刚刚使用单个文件名测试的那样, gsub() 似乎可以工作。但是,我通过 list.files() 获取文件名。那时,它返回我 NA 作为输出。
  • 这就是我所困惑的。 gsub 似乎返回了共享示例的预期输出。

标签: r regex


【解决方案1】:

使用来自base Rtrimws

 trimws(fname, whitespace = ".*_|\\..*")
[1] "00020"

数据

fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"

【讨论】:

    【解决方案2】:

    这是一个使用sub的简单方法:

    fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"
    output <- sub("^.*-ASG_\\d+_(.*)\\.tab$", "\\1", fname)
    output
    
    [1] "00020"
    

    上面我们使用一个捕获组来隔离文件名中您想要匹配的部分,无扩展名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 2020-12-16
      • 2014-10-17
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多