Regex 转换任何';这不是一个空的数字

Regex 转换任何';这不是一个空的数字,regex,r,Regex,R,我有一个数据向量,类似的版本如下: x <- c("1234123xcv?","12341534xxx.","hello","goodbye") 我知道我可以这样做,手动指定每个大写/小写字母和我知道的几个特殊字符: grep("[A-Za-z\\?\\.]",x,value=TRUE) 但我不知道这个领域里的“其他”是什么,不一定是一个数字。(无法手动查看,因为它太大) 考虑到这一点,我的问题是:有没有办法指定只希望在gsub()中返回数字 你需要这样的东西: [^0-9]* 这将

我有一个数据向量,类似的版本如下:

x <- c("1234123xcv?","12341534xxx.","hello","goodbye")
我知道我可以这样做,手动指定每个大写/小写字母和我知道的几个特殊字符:

grep("[A-Za-z\\?\\.]",x,value=TRUE)
但我不知道这个领域里的“其他”是什么,不一定是一个数字。(无法手动查看,因为它太大)


考虑到这一点,我的问题是:有没有办法指定只希望在
gsub()
中返回数字

你需要这样的东西:

[^0-9]*

这将匹配任何非数字的字符,无需指定哪个字符。

在括号内,
^
表示不匹配。因此,这表示将不是数字的内容替换为“”


您可以使用[\d]。将只返回数字。

我会说

gsub("\\D","",x) # yada yada yada
gsub("[^0-9]+", "", x)

[^0-9]一次只替换一个字符,[^0-9]+一个或多个更快的字符。

1。[]在您只有一个元素时是不必要的(但您要如何处理它?)。2. \ 必须转义。是数字还是数字?“-1”是一个数字,“3.14”是数字,“1.2E07”也是数字。在我的特殊情况下,它只是数字。我不(相信)我的数据中有任何这样格式的数字。下面的示例与上面示例中的模式非常相似。False。看看我的答案的输出。它说用
替换所有不是数字的东西。
+
是不必要的。@Gsee,我想他不是说你的版本错了。只是他的版本会通过一次替换任何连续的非数字来减少替换。为了同样的结果。他甚至可以争辩说,这样做可以更快。。。不管怎样,在我看来,把这句话写进评论会更好。@flodel。说得好。而且w_g还没有足够的代表留下评论。我将进行编辑,以便取消投票。如果速度是个问题,那么使用
perl=TRUE
也会更快。我发现
gsub(“\\D+”,“”,x,perl=TRUE)
只比
gsub([^0-9]+”,“”,x,perl=TRUE)稍微慢一点。
gsub("[^[:digit:]]", "", x) #......
gsub("\\D","",x) # yada yada yada
gsub("[^0-9]+", "", x)