r - 如何检索字符串中的所有数字并使用正则表达式将它们组合成一个数字?

标签 r regex

这应该很容易,但是使用其他 SO 帖子的建议后的结果让我感到困惑。而且,当然,我想避免使用 For loop
可重现的示例

library(stringr)
input <- "<77Â 500 miles</dd>"
mynumbers <- str_extract_all(input, "[0-9]")
变量 mynumbers 是一个包含五个字符的列表:
> mynumbers
[[1]]
[1] "7" "7" "5" "0" "0"
但这就是我所追求的:
> mynumbers
[1] 77500
This post 建议使用 paste() ,我想这应该可以正常工作,因为 sepcollapse 参数正确,但我必须在这里遗漏一些重要的东西。我也尝试过使用 unlist() 。这是我迄今为止尝试过的:
1 - 使用 paste()
> paste(mynumbers)
[1] "c(\"7\", \"7\", \"5\", \"0\", \"0\")"
2 - 使用 paste()
> paste(mynumbers, sep = " ")
[1] "c(\"7\", \"7\", \"5\", \"0\", \"0\")"
3 - 使用 paste()
> paste (mynumbers, sep = " ", collapse = NULL)
[1] "c(\"7\", \"7\", \"5\", \"0\", \"0\")"
4 - 使用 paste()
> paste (mynumbers, sep = "", collapse = NULL)
[1] "c(\"7\", \"7\", \"5\", \"0\", \"0\")"
5 - 使用 unlist()
> as.numeric(unlist(mynumbers))
[1] 7 7 5 0 0
我希望你们中的一些人有一些建议。
我想以某种方式使用正则表达式有一个优雅的解决方案,但我也对特定于 R 的粘贴/取消列表问题非常感兴趣。谢谢!
编辑:
该问题被标记为可能与 this post 重复。
那里建议的解决方案肯定会解决问题,我有点尴尬地承认,尽管多次尝试在 SO 上找到现有解决方案,但我没有看到该帖子。但是,我的帖子还包含有关 stringr::str_extract_allbase::paste 功能的详细信息,因此此处提供的具体答案至少对我非常有用。

最佳答案

str_extract_all 返回一个 list 。我们需要先转换为 vector ,然后再转换为 paste 。为了提取 list 元素,我们使用 [[ ,因为只有一个元素, mynumbers[[1]] 将获得 vector 。然后,执行 paste/collapseas.numeric

as.numeric(paste(mynumbers[[1]],collapse=""))
#[1] 77500

我们还可以匹配一个或多个非数字( \\D+ ),将其替换为 "" 中的 gsub 并转换为 numeric
as.numeric(gsub("\\D+", "", input))
#[1] 77500

关于r - 如何检索字符串中的所有数字并使用正则表达式将它们组合成一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39698398/

相关文章:

r - 使用 rlang 选择整个数据框而不仅仅是一列

R 根据不同信号提取时间序列中的后续日期

r - 将数据框中的重复向量分配给 R 中的条件变量

html - R Shiny - 音频播放

r - 如何在R中的x轴上使用两个分类变量制作散点图

python - 使用正则表达式从原始字符串中提取月份名称和日期数字(编辑 : new test cases from 7)

python - 提取字符、字符串或括号之间的文本

regex - 明智地解析科学记数法?

php - $ 与最后一个字符换行符之前的位置不匹配

regex - 为什么 `(?:)` 正则表达式有效?