正则表达式从R中删除字符串中的所有非数字符号

时间:2017-06-15 20:27:57

标签: r regex string

如何从可以具有xxxx.x或xxxx.x-x结构的字符串中提取数字并将它们组合为数字? e.g。

list <- c("1010.1-1", "1010.2-1", "1010.3-1", "1030-1", "1040-1",
          "1060.1-1", "1060.2-1", "1070-1", "1100.1-1", "1100.2-1")

所需的(数字)输出为:

101011, 101021, 101031...

我试过

regexp <- "([[:digit:]]+)"
solution <- str_extract(list, regexp)

然而,它只提取第一组数字;并使用像

这样的东西
regexp <- "([[:digit:]]+\\.[[:digit:]]+\\-[[:digit:]]+)"

返回第一个结果(初始形式的数据),否则NA匹配更短的字符串。想法?

2 个答案:

答案 0 :(得分:0)

删除所有非数字符号:

list <- c("1010.1-1", "1010.2-1", "1010.3-1", "1030-1", "1040-1", "1060.1-1", "1060.2-1", "1070-1", "1100.1-1", "1100.2-1")
as.numeric(gsub("\\D+", "", list))
## => [1] 101011 101021 101031  10301  10401 106011 106021  10701 110011 110021

请参阅R demo online

答案 1 :(得分:0)

我没有R的经验,但我知道正则表达式。当我查看模式时,您需要指定"([[:digit:]]+)"。我假设[[:digit:]]代表[0-9],因此您正在捕获 一组 数字。

在我看来,您错过了 + ,以便捕获多组数字。

我认为你需要使用"([[:digit:]]+)+"