单次通过组合grep和sub?

时间:2014-02-12 19:34:19

标签: regex r replace grep

我想知道是否有更有效的方式来提取pr而不是grep然后sub

v <- c("a","b","P:18.18% R:66.67%","d")
pr <- grep("^P:([^%]*)% R:([^%]*)%$",v,value=TRUE)
(p <- as.numeric(sub("^P:([^%]*)% R:([^%]*)%$","\\1",pr)))
[1] 18.18
(r <- as.numeric(sub("^P:([^%]*)% R:([^%]*)%$","\\2",pr)))
[1] 66.67

1 个答案:

答案 0 :(得分:2)

您可以使用gregexprregmatches提取子字符串:

regmatches(v, gregexpr("(?<=(P|R):).+?(?=%( |))", v, perl = TRUE))


[[1]]
character(0)

[[2]]
character(0)

[[3]]
[1] "18.18" "66.67"

[[4]]
character(0)

您可以使用unlist创建包含所有结果的单个向量。

unlist(regmatches(v, gregexpr("(?<=(P|R):).+?(?=%( |))", v, perl = TRUE)))

[1] "18.18" "66.67"