但是,str_detect的帮助页面显示“与grepl(pattern,x)等效”:

str_detect("ALL-", str_c("\\b", "ALL-", "\\b"))
[1] FALSE




grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE


我想其中之一不能按预期工作吗?还是我错过了什么?

最佳答案

将参数perl = TRUE添加到grepl()时,将得到相同的结果:

> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE
> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-", perl = T)
[1] FALSE


此参数表示grepl()将使用Perl兼容的正则表达式。

?grep中存在此警告,可能与之相关?


gsub和gregexpr的POSIX 1003.2模式不能正确使用重复的单词边界(例如pattern =“ \ b”)。使用perl = TRUE进行此类匹配(但对于非ASCII输入而言可能无法正常工作,因为“单词”的含义取决于系统)。

关于r - R-为什么在以破折号结尾的'单词'上使用单词边界时,str_detect返回的结果与grepl不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55509660/

10-09 13:57