R正则表达式引擎在3.2.0中发生了变化?

时间:2015-05-05 19:13:32

标签: regex r

将R更新到版本3.2.0(来自“Spring Dance”3.1.0), 我有一个无法预料的正则表达式错误。

我有以下代码来查找包含X的字符,后跟四个或更多数字。

library(stringr)
vec = c("X12345", "X12", "X235252", "X442")
str_detect(vec, "X[0-9]{4, }")

显然,逗号后面的空格意味着四个或更多。 但是,在R 3.2.0中,上述语句会产生错误。

Error in stri_detect_regex(string, pattern, opts_regex = attr(pattern,  : 
Error in {min,max} interval. (U_REGEX_BAD_INTERVAL)
Error during wrapup:

这实际上是由正则表达式中逗号后面的空格引起的。但是,据我所知,上面的陈述完全没问题,并且在之前的版本中工作得很好。

有没有人知道正则表达式引擎是否已经改变,并且可能为我提供一个解决方法,除了在逗号之后加上大量数字? (匹配四个或更多数字的正确正则表达式)

1 个答案:

答案 0 :(得分:4)

在花括号中用逗号后面的空格, str_detect期望正则表达式中提供的最小值和最大值。 对于最小值,使用{min,}作为没有空格的重复运算符 逗号和结束大括号之间。

 library(stringr)
 vec = c("X12345", "X12", "X235252", "X442")
 str_detect(vec, "X[0-9]{4, }")

给出错误消息

 Error in stri_detect_regex(string, pattern, opts_regex = attr(pattern,  : 
          Error in {min,max} interval. (U_REGEX_BAD_INTERVAL)

没有空间

 str_detect(vec, "X[0-9]{4,}")

返回

 [1]  TRUE FALSE  TRUE FALSE