You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R 3.6.1中grepl与stri_detect_regex正则匹配表现差异咨询

grepl与stri_detect_regex对\p{L}解析差异的原因说明

注:该问题仅出现于R 3.6.1版本,新版本中两函数表现已一致。

在R 3.6.1中,grepl(开启perl=T)与stri_detect_regex对正则表达式\p{L}的解析差异,根源在于二者依赖的正则引擎不同:

  • grepl(..., perl = T)基于PCRE(Perl兼容正则表达式)引擎,该版本的PCRE对Unicode字母属性\p{L}的覆盖范围有限,未将Latin Extended D/E这类较新的Unicode字符块中的字符归类为字母范畴。
  • stri_detect_regex属于stringi包,依赖ICU(Unicode国际组件)引擎,ICU对Unicode标准的支持更全面,能完整识别所有Unicode官方定义的字母字符,包括Latin Extended D/E块中的字符。

结合测试代码:

v <- c("é", "Ḃ", "Ꞵ", "ꞵ", "Ꞷ", "ꞷ","keepme", "remove$me", "remove.me")

v[grepl("^[\\p{L} ]+$", v, perl = T)]
# [1] "é"      "Ḃ"      "keepme"

v[stri_detect_regex(v, "^[\\p{L} ]+$")]
# [1] "é"      "Ḃ"      "\ua7b4" "\ua7b5" "\ua7b6" "\ua7b7" "keepme"

示例中第3-7个字符(Ꞵ、ꞵ、Ꞷ、ꞷ)属于Latin Extended D Unicode块,在R 3.6.1的PCRE引擎中不被\p{L}匹配,但ICU引擎可正确识别为字母,因此出现了结果差异。

内容的提问来源于stack exchange,提问作者Merijn van Tilborg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:39:53