r - R - 为什么 str_detect 在以破折号结尾的“单词”上使用单词边界时返回与 grepl 不同的结果
问题描述
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 Compatible Regex。
中有此警告?grep
,可能与此有关?
gsub 和 gregexpr 的 POSIX 1003.2 模式不能与重复的字边界(例如,模式 = "\b")一起正常工作。使用 perl = TRUE 进行此类匹配(但对于非 ASCII 输入可能无法按预期工作,因为“单词”的含义取决于系统)。
推荐阅读
- javascript - Spring MVC - 从控制器发布到不同的 url
- python - 从 python 的列表中删除值 / nan / 空字符串(“”)
- php - 如何在 WooCommerce /my-account/downloads/ 中的下载表中添加一列
- scala - 为什么 scala-swing Button 可以分配给 MainFrame 的内容?
- zos - 参数传递——非标准联动
- shopify - Shopify 不断删除应用的折扣
- javascript - 异步函数
- c - 有没有办法循环使用 C 中的四个基本操作?
- python - 将多个 json 文件解析为 pandas 数据框
- javascript - 防止用户输入某些字符,同时允许其他人使用 jquery