有这样的矢量字符
c("E_B_V_BNOW_UN_3%_01-02-2016",
"E_B_V_XX_3%_20%_01-02-2016",
"E_B_YY_25%_3%_20%_01-02-2016")
我想提取%
附近的费率?
我可以使用strsplit
和gsub
的组合来实现它,但是使用单个正则表达式是一种方法吗?
期望输出为:
list(c(3),c(3,20),c(25,3,20))
答案 0 :(得分:4)
regmatches(s, gregexpr("\\d+(?=%)", s, perl = TRUE))
# [[1]]
# [1] "3"
#
# [[2]]
# [1] "3" "20"
#
# [[3]]
# [1] "25" "3" "20"
答案 1 :(得分:1)
使用stringr::str_extract_all
。
s <- c("E_B_V_BNOW_UN_3%_01-02-2016",
"E_B_V_XX_3%_20%_01-02-2016",
"E_B_YY_25%_3%_20%_01-02-2016")
library("stringr")
str_extract_all(s, "\\d+%")
或者为了摆脱百分比并使其成为数字,你可以这样做:
lapply(str_extract_all(s, "\\d+(?=%)"), as.numeric)
正如其他回答者所指出的那样。这使用positive lookahead assertion。