如果我错了,请纠正我,但模式:[a-z]应该匹配从a到z(包括a到z)的任何小写字符(即)[a-z]==[abcDefghijklmnopqrstuvwxyz]

pattern <- "[a-z]"

stringr::str_detect(c("word", "12345"), pattern)
[1] TRUE FALSE

情况是这样的,在引擎盖下的某个地方[a-z]被翻译成[abcDefghijklmnopqrstuvwxyz],或者它只是简单地理解这一点,以迭代基于某个数字系统的字符?

推荐答案

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的正则表达式)

R相关问答推荐

如何使用文本表达来子集数据

从多个前置日期中获取最长日期

无法运行通过R中的Auto.arima获得的ARIMA模型

将年度数据插入月度数据

如何计算多个日期是否在一个日期范围内

如何写商,水平线,在一个单元格的表在R

我正在努力用R计算数据集中的中值逐步距离

R spatstat Minkowski Sum()返回多个边界

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

正则表达式在第二个管道和第二个T之后拆分R中的列

在使用具有Bray-Curtis相似性的pvCluust时计算p值

在点图上绘制置信度或预测区间ggplot2

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

使用列中的值来调用函数调用中应使用的其他列

以任意顺序提取具有多个可能匹配项的组匹配项

如何构建一个for循环来循环处理动物ID?

为什么将负值向量提升到分数次方会得到NaN

在不重复主题的情况下重新排列组

附加中缀操作符

条形图中的条形图没有try 赋予它们的 colored颜色