从开头到/ aaa-bbb-ccc /匹配所有,不包括/ aaa-bbb-ccc /

时间:2017-11-14 20:50:45

标签: r regex

考虑以下字符串:

tempo/blah/blah/aaa-bbb-ccc/def/ghi/jkl

我有一堆字符串,其中包含/aaa-bbb-ccc/。我想删除/aaa-bbb-ccc/之前出现的所有字符。例如,上述最终产品应为/aaa-bbb-ccc/def/ghi/jkl

我的尝试,经过一番搜索:

x <- "tempo/blah/blah/aaa-bbb-ccc/def/ghi/jkl"
sub("^.*[^/aaa-bbb-ccc/]", "", x)
[1] ""

1 个答案:

答案 0 :(得分:4)

您需要使用延迟点匹配并将已知值与捕获组一起包装,以便稍后通过反向引用进行恢复:

x <- "tempo/blah/blah/aaa-bbb-ccc/def/ghi/jkl"
sub(".*?(/aaa-bbb-ccc/)", "\\1", x)
## [1] "/aaa-bbb-ccc/def/ghi/jkl"

请参阅this R demo

请参阅regex demo.*?匹配任何0+字符,尽可能少,(/aaa-bbb-ccc/)是ID为1的捕获组,引用\1从替换模式。

请注意,您还可以使用regmatches / regexpr 提取该部分:

x <- "tempo/blah/blah/aaa-bbb-ccc/def/ghi/jkl"
regmatches(x, regexpr("/aaa-bbb-ccc/.*", x))

this R demo.*只抓取任何0+字符直到整个字符向量的末尾。