gpt4 book ai didi

仅使用 gsub 替换表达式以外的所有字符

转载 作者:行者123 更新时间:2023-12-04 10:11:29 29 4
gpt4 key购买 nike

给定字符串:

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
  • 的解决方案

最佳答案

如果您不关心 abc\d{2} 上下文,您可以使用

sub(".*(abc\\d{2}).*", "\\1", smple_paths)

参见 this regex demothis 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 占位符将捕获的文本插入到结果中。

关于仅使用 gsub 替换表达式以外的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584954/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com