【问题标题】:How to extract character string dynamically from character vector r如何从字符向量r中动态提取字符串
【发布时间】:2017-02-19 02:09:29
【问题描述】:

这里是三个字符向量:

[1] "Session_1/Focal_1_P1/240915_P1_S1_F1.csv"
[2] "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv"
[3] "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv"

我正在尝试以标准化方式分别提取字符串 P1PA10DA100(因为我还有数百个其他字符串要提取。

我知道我需要使用regex,但我对它还很陌生,不确定是哪一个。

我可以看到共同点是 6 个数字 (\d\d\d\d\d\d),后跟一个 _,然后是我想要的,然后是另一个 _

如何提取我想要的内容?我相信grep,但不是 100% 使用我需要的正则表达式。

【问题讨论】:

    标签: r regex extract


    【解决方案1】:

    我们可以使用gsub。我们匹配零个或多个字符 (.*) 后跟一个正斜杠 (\\/),后跟一个或多个数字和一个下划线 (\\d+_),或 (!) 两个下划线实例,后跟一个或多个非下划线字符 ((_[^_]+){2}) 并将其替换为空白 ("")。

    gsub(".*\\/\\d+_|(_[^_]+){2}", "", v1)
    #[1] "P1"    "PA10"  "DA100"
    

    或者我们提取向量的basename,匹配一个或多个数字后跟下划线(\\d+_)后跟字符而不是下划线(([^_]+))作为捕获组后跟字符直到结束字符串并将其替换为捕获组的反向引用 (\\1)。

    sub("\\d+_([^_]+).*", "\\1", basename(v1))
    #[1] "P1"    "PA10"  "DA100"
    

    数据

    v1 <- c( "Session_1/Focal_1_P1/240915_P1_S1_F1.csv",
           "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv",
           "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多