tl;dr不用太担心这一点,改用[:alpha:]
(这保证匹配所有字母字符,并被认为是最佳实践).
@benson23‘S的回答是好的,但请注意,stringr
使用ICU引擎(通过stringi
包),文档为here,这不同于base R使用的实现(使用TRE,如果是perl = TRUE
,则使用PCRE):参见例如this answer.
在上面提到的ICU文件中,它说对于范围
要包括的字符由Unicode码位排序确定
因此,大概在幕后,它正在将字符转换为其Unicode表示形式,并测试它们是否在范围内(枚举数为not).
由于Unicode Points are independent of locale(我大声疾呼是因为我自己才发现这一点),这意味着范围定义unlike排序/校对将是独立于地区的.(这与关于BASE-R正则表达式范围匹配的this answer一致...)
Sys.setlocale(category = "LC_COLLATE", locale = "et_EE")
[1] "et_EE"
stringr::str_detect("T", "[A-Z]")
[1] TRUE
值得一提的是,this extensive answer指出,大多数内置的正则表达式实现都是not个特定于地区的(即,行为像R的正则表达式)