在R中提取指定字符之间的字符

时间:2014-07-21 08:25:13

标签: r string extract gsub

我有这个变量 x =" 379_exp_mirror1.csv" 我需要在开始时提取数字(" 379")(它不总是有3个字符),即第一个" "之前的所有内容。然后我需要在第二个" "之间提取所有内容。和#34;。",在这种情况下" mirror1"。

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

谢谢

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可以使用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"

答案 2 :(得分:1)

可能你可以试试:

 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"