字符串将是
"-042-195" "+143-192" "-001*145" "#045+125" "#125$"
如何提取最后一组数字?
"195" "192" "145" "125" "125"
答案 0 :(得分:2)
可能更好的方法,但你可以strsplit
,然后取结果的最后一个元素
> sapply(strsplit(myData, "-|[*]|[+]|#|[$]"), tail, n = 1)
[1] "195" "192" "145" "125" "125"
或替换所有非字母数字字符然后拆分并取最后一个数字
> sapply(strsplit(gsub("[^[:alnum:] ]", "&", myData), "&"), tail, n = 1)
[1] "195" "192" "145" "125" "125"
答案 1 :(得分:2)
尝试:
v1 <- c("-042-195","+143-192","-001*145", "#045+125", "#125$")
library(stringr)
str_extract(v1, perl("(?<=[^0-9])[0-9]+(?=[^0-9]?$)"))
#[1] "195" "192" "145" "125" "125"
(?<=[^0-9]) #look behind for all except numbers
[0-9]+ #followed by numbers
(?=[^0-9]?$ #look ahead for all except numbers if present near the end
或者
sapply(str_extract_all(v1, "\\d+"),tail,1)
#[1] "195" "192" "145" "125" "125"
或者
library(stringi)
stri_extract_last(v1,regex="\\d+")
#[1] "195" "192" "145" "125" "125"
答案 2 :(得分:2)
1)sub 如果ch
是字符串的输入向量,则使用sub
,其正则表达式匹配任何非数字({{1} })后跟数字("\\D"
),后跟其他任何内容("\\d+"
)并返回匹配的数字:
".*"
如果我们保证数字前面至少有一个非数字,这就是问题中的例子,那么sub(".*\\D(\\d+).*", "\\1", paste(" ", ch))
## [1] "195" "192" "145" "125" "125"
可以简化为paste(" ", ch)
:
ch
2)gsubfn package中的strapplyc sub(".*\\D(\\d+).*", "\\1", ch)
## [1] "195" "192" "145" "125" "125"
与指定的正则表达式匹配,允许比上面更简单的正则表达式:
strapplyc
2a)strapply 或使用library(gsubfn)
sapply(strapplyc(ch, "\\d+"), tail, 1)
## [1] "195" "192" "145" "125" "125"
(最后没有strapply
)与c
返回数字:
as.numeric
答案 3 :(得分:0)
感觉像打桩一样,但这适用于给定的样本:
v1 <- c("-042-195","+143-192","-001*145", "#045+125", "#125$")
v1 <- gsub("\\D", "", v1)
v1 <- substr(x = v1, start = nchar(v1)-2, nchar(v1))
Gsub
除了数字之外的所有内容,然后拨打substr
以保留最后的三位数字