从给定的字符串中提取数字和运算符

问题描述 投票:0回答:3

我有一个这样的向量:

 vec <- c("a + 17", "äÜ - 20*3")

有不同的字母、数字和运算符。我想摆脱这些信件。或者,反过来,只保留数字和运算符。这是我正在寻找的结果:

 c("17", "-20*3")

我试过

gsub("[:alpha:]", "", vec)
但它不起作用而且我不明白为什么因为
[:alpha:]
应该删除任何字母然后我应该得到我正在寻找的矢量。但事实并非如此。

我发现一个类似的问题但它也没有帮助我。

r gsub
3个回答
2
投票

这是使用

gsub
的不同方法:

x <- gsub("[^0-9+-/*]", "", vec)

c(as.numeric(x)[1], x[2])

输出:

[1] "17"    "-20*3"
Warning message:
NAs introduced by coercion

1
投票

是的,您可以通过

gsub
实现它,但是您的正则表达式是错误的。尝试应用下一个:

vec <- c("a + 17", "djdj - 20*3 + äÜ - 2")
vec <- gsub("[[:alpha:]]+", "", vec)  # remove one or more letters
vec <- gsub("\\s+", "", vec)  # remove whitespace

甚至

gsub("[^0-9\\*\\+\\-\\/]+", "", vec)  # remove all that isn't a number, minus, divide, times, plus or whitespace 

1
投票

这是一个非正则表达式的方法。从你的矢量开始:

vec  <- c("a + 17", "äÜ - 20*3")

首先,定义一个允许的字符列表:

good <- c(0:9, "+", "-", "*", "/", "^")

然后,将向量拆分为字符元素,只保留相交的元素:

vec <- lapply(strsplit(vec, ""), \(x) x[x %in% good])

最后 - 将元素连接在一起:

vec <- sapply(vec, paste0, collapse="")

vec
[1] "+17"  "-20*3"
© www.soinside.com 2019 - 2024. All rights reserved.