给定字符串:
smple_paths <- c("/path/path/path/abc22/path/path",
"/apath/apath/paath/abc11/something/path")
我想替换除短语abc\\d{2}
gsub(
pattern = "(?!abc\\d{2})",
replacement = "",
x = smple_paths,
perl = TRUE
)
# [1] "/path/path/path/abc22/path/path"
# [2] "/apath/apath/paath/abc11/something/path"
abc22
abc11
stringr::str_extract
的解决方案或任何其他不基于gsub
的解决方案答案 0 :(得分:1)
如果您不关心abc\d{2}
上下文,可以使用
sub(".*(abc\\d{2}).*", "\\1", smple_paths)
请参阅this regex demo和this R demo。
如果您关心上下文,您可以在abc
之后和/
之前或字符串结尾之前匹配并捕获/
+ 2位数字,同时匹配此前后的任何文字模式使用
sub("^.*/(abc\\d{2})(?:/.*)?$", "\\1", smple_paths)
请参阅R demo和regex demo。
<强>详情
^
- 字符串的开头(此处不需要,但为了清晰起见而保留).*
- 任意0个字符,尽可能多/
- /
字符(abc\\d{2})
- 第1组:abc
和2位(?:/.*)?
- /
的可选(1或0)出现,随后是尽可能多的0 +字符$
- 字符串结束。替换模式中的\1
占位符会将捕获的文本插回到结果中。