【问题标题】:Extract characters between specified characters in R提取R中指定字符之间的字符
【发布时间】:2014-07-21 08:25:13
【问题描述】:

我有这个变量 x=“379_exp_mirror1.csv” 我需要在开头提取数字(“379”)(并不总是有 3 个字符),即第一个“”之前的所有内容。然后我需要提取第二个“”和“.”之间的所有内容,在本例中为“mirror1”。

我尝试了几种 sub 和 gsub 的组合都没有成功,请谁能给我一些指示?

谢谢

【问题讨论】:

标签: r string extract gsub


【解决方案1】:

您可以使用正则表达式。为您的问题^(?<Number>[0-9]*)_.* 做这项工作

1/ 用这个网站测试你的正则表达式:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

或者你可以用下划线分割字符串,然后尝试解析(int.TryParse)。我认为第二种更好,但是如果您想成为正则表达式大师,请尝试第一种方法

【讨论】:

    【解决方案2】:

    您可以使用sub 提取子字符串:

    x <- "379_exp_mirror1.csv" 
    
    sub("_.*", "", x)
    # [1] "379"
    
    sub("^(?:.*_){2}(.*?)\\..*", "\\1", x)
    # [1] "mirror1"
    

    gregexpr 的另一种方法:

    regmatches(x, gregexpr("^.*?(?=_)|(?<=_)[^_]*?(?=\\.)", x, perl = TRUE))[[1]]
    # [1] "379"     "mirror1"
    

    【讨论】:

      【解决方案3】:

      也许你可以试试:

       library(stringr)
       x <- "379_exp_mirror1.csv" 
       str_extract_all(x, perl('^[0-9]+(?=_)|[[:alnum:]]+(?=\\.)'))[[1]]
       #[1] "379"     "mirror1"
      

      或者

         strsplit(x, "[._]")[[1]][c(T,F)]
         #[1] "379"     "mirror1"
      

      或者

          scan(text=gsub("[.]","_", x),what="",sep="_")[c(T,F)]
         #Read 4 items
         #[1] "379"     "mirror1"
      

      【讨论】:

        猜你喜欢
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多