将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:
这实际上是由正则表达式中逗号后面的空格引起的。但是,据我所知,上面的陈述完全没问题,并且在之前的版本中工作得很好。
有没有人知道正则表达式引擎是否已经改变,并且可能为我提供一个解决方法,除了在逗号之后加上大量数字? (匹配四个或更多数字的正确正则表达式)
答案 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