从R中的字母数字向量中提取文本

时间:2016-03-29 07:37:54

标签: r string extract

我有一个类似下面的数据,需要提取任何数字之前的文本。或者如果我们可以将文本和数字分开,那么它会很棒

df<-c("axz123","bww2","c334")

输出

"axz", "bww", "c"

"axz","bww","c"
"123","2","334"

3 个答案:

答案 0 :(得分:3)

我们可以使用[:alpha:]来匹配字母字符,并将其与gsub()结合使用,并使用否定删除所有非字母字符:

gsub("[^[:alpha:]]", "", df)
#[1] "axz" "bww" "c" 

要获得非字母字符,我们可以放弃否定^

gsub("[[:alpha:]]", "", df)
#[1] "123" "2"   "334"

答案 1 :(得分:3)

我们可以这样做:

df <- c("axz123","bww2","c334")
gsub("\\d+", "", df)
#[1] "axz" "bww" "c" 
gsub("(\\D+)", "", df)
#[1] "123" "2"   "334"

对于你的另一个例子:

df <- "BAILEYS IRISH CREAM 1.75 LITERS REGULAR_NOT FLAVORED"
gsub("\\d.*", "", df)
#[1] "BAILEYS IRISH CREAM "
gsub("[A-Z_ ]*", "", df)
#[1] "1.75"

答案 2 :(得分:1)

使用str_extract和正则表达式的外观。我们在任意数字((?=\\d))之前匹配一个或多个字符并提取它。

library(stringr)
str_extract(df, "[[:alpha:]]+(?=\\d)")
#[1] "axz" "bww" "c"  

如果我们需要分隔数字和非数字,可以使用strsplit

lst <- strsplit(df, "(?<=[^0-9])(?=[0-9])", perl=TRUE)