提取接近百分号的费率

时间:2016-03-07 21:14:25

标签: regex r

有这样的矢量字符

  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")

我想提取%附近的费率?

我可以使用strsplitgsub的组合来实现它,但是使用单个正则表达式是一种方法吗?

期望输出为:

list(c(3),c(3,20),c(25,3,20))

2 个答案:

答案 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