仅返回正则表达式的匹配部分

时间:2015-08-24 13:47:34

标签: regex r

我有:

> pattern
[1] "(/[[:digit:]]{4}/)"

所以我想只提取匹配的部分...数字加上/.../。这是我试过的:

> gsub(pattern, '\\1', grep(pattern, c("t3tg3wgw/5764/", "ggg", "grsgs/gwgew/5656/bfsbs"), value=TRUE))
[1] "t3tg3wgw/5764/"         "grsgs/gwgew/5656/bfsbs"

然而,这仍会返回附加到实际匹配的字母,这些字母本身不与正则表达式匹配。如何仅提取/5764//5656/

2 个答案:

答案 0 :(得分:0)

我们可以使用/中的[0-9]+提取模式/后跟一个或多个数字(str_extract_all),然后library(stringr)来输出list 1}},可unlist转换为vector

library(stringr)
unlist(str_extract_all(v1, '/[0-9]+/'))
#[1] "/5764/" "/5656/"

或者我们使用相同的模式并使用regmatches/gregexpr

中的base R
unlist(regmatches(v1, gregexpr('/[0-9]+/',v1)))
#[1] "/5764/" "/5656/"

数据

v1 <- c("t3tg3wgw/5764/", "ggg", "grsgs/gwgew/5656/bfsbs")

答案 1 :(得分:0)

尝试将模式更改为.*(/[[:digit:]]{4}/).*