考虑以下字符串:
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] ""
答案 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+字符直到整个字符向量的末尾。