我有这个变量 x =" 379_exp_mirror1.csv" 我需要在开始时提取数字(" 379")(它不总是有3个字符),即第一个" "之前的所有内容。然后我需要在第二个" "之间提取所有内容。和#34;。",在这种情况下" mirror1"。
我尝试了几种与sub和gsub的组合没有成功,有人能给我一些指示吗?
谢谢
答案 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"