我想解析前导为零的数字。
我尝试了readr::parse_number
,但是,它省略了前导零。
library(readr)
parse_number("thankyouverymuch02")
#> [1] 2
创建于2022-12-30与reprex v2.0.2
期望的输出是02
最简单和最天真的是:
gsub("\D", "", "thankyouverymuch02")
[1] "02"
正则表达式特殊的"\d"
只匹配一个0-9字符;相反的是"\D"
,它匹配一个字符,该字符可以是除 0-9以外的任何字符。
如果你有多个数字补丁的字符串,你希望它们是不同的,parse_number
和这个简单的gsub
都不会起作用。
gsub("\D", "", vec)
# [1] "02" "0302"
因此,它必须总是返回一个list
(因为我们不必先验地知道多少个元素有0个、1个或多个数字组)。
vec <- c("thankyouverymuch02", "thank03youverymuch02")
regmatches(vec, gregexpr("\d+", vec))
# [[1]]
# [1] "02"
# [[2]]
# [1] "03" "02"
#### equivalently
stringr::str_extract_all(vec, "\d+")
# [[1]]
# [1] "02"
# [[2]]
# [1] "03" "02"