【发布时间】:2021-12-22 09:51:08
【问题描述】:
假设我在内存中有以下对象:
ab
ab_b
ab_pm
ab_pn
c1_ab_b
我只想保留ab_pm 和ab_pn。
我尝试在ls() 中使用负前瞻来列出ab、ab_b 和c1_ab_b 以进行删除:
rm(list = ls(pattern = "ab_?(?!p)")
但是,我得到了错误:
Error in grep(pattern, all.names, value = TRUE) :
invalid regular expression 'ab_?(?!p)', reason 'Invalid regexp'
我在regex101.com 尝试了我的正则表达式,发现它匹配所有五个对象名称,这表明我的正则表达式并非“无效”,尽管它没有达到我想要的效果。我的问题是:
- R 中的
ls()是否支持负前瞻?我知道grep()需要perl = TRUE来支持它,但在ls()帮助文档中没有看到类似的论点。 - 如何正确选择我要移除的三个对象?
【问题讨论】:
-
在 regex101.com 输入正则表达式和测试字符串后,点击左上角的“保存正则表达式”。这将为您提供一个可用于链接的 URL,使读者可以查看您的测试。
-
感谢 Cary Swoveland 的提示!将来肯定会这样做!
标签: r regex regex-lookarounds ls