从字符串中提取匹配模式

时间:2019-08-06 00:58:32

标签: r regex

我的数据:

d1 <- "GET /api/dir/100%ABC/user/prints/abcd1111/file"
d2 <- "GET /api/dir/100%ABC/prints/efgh1111/file"

我想从我的数据中提取字符串:user/printsprints部分。 我知道如何在2个特定字符串之间提取:

str_extract(d1, "(?<=/dir/)(.*)(?=%ABC)")

获取数字100

如何提取%ABC/之后并以prints结尾(包含prints),以便可以从同一脚本中获取user/printsprints

3 个答案:

答案 0 :(得分:2)

不太优雅,但是应该这样做:

paste0(str_extract(d1, "(?<=%ABC)(.*)(?=prints)"),"prints")
# [1] "/user/prints"
paste0(str_extract(d2, "(?<=%ABC)(.*)(?=prints)"),"prints")
# [1] "/prints"

答案 1 :(得分:2)

在基数R中,我们可以使用sub提取"%ABC""prints"之后的所有内容。

sub(".*%ABC/(.*prints).*", "\\1", d1)
#[1] "user/prints"

sub(".*%ABC/(.*prints).*", "\\1", d2)
#[1] "prints"

答案 2 :(得分:1)

我们可以使用gsub中的base R

gsub(".*ABC/|/\\w+/\\w+$", "", d1)
#[1] "user/prints"
gsub(".*ABC/|/\\w+/\\w+$", "", d2)
#[1] "prints"