R 中传递给 grep() 的字符串长度是否有限制?

2024-04-23

我有一个包含 2735 个字符的字符串。我想在字符向量中搜索该字符串。当我运行 grep() 时

grep(pattern=substr(string,1,2560), x=myvector)

我收到错误:

Error in grep(pattern = substr(string, 1, 2560), x = myvector) : 
  invalid regular expression 'all the characters of my string...'

如果我尝试

grep(pattern=substr(string,1,2559), x=myvector)

我没有得到错误。

问题:传递给 grep() 时字符串长度是否有限制?如果是这样,我应该如何解决它?


嗯,看起来您偶然发现了一个未记录的“功能”。解决方法是设置perl=TRUE,使用 PCRE 库:

pat <- paste(rep("a", 2560), collapse="")
x <- paste0(pat, pat)

grep(pat, x)
#Error in grep(pat, ch) : 
#  invalid regular expression 'aaa....'

grep(pat, x, perl=TRUE)
#[1] 1

我猜测这会根据评论中的评论起作用?grep:

如果您正在进行大量正则表达式匹配,包括非常长的字符串,您将需要考虑使用的选项。一般来说,PCRE 会比默认的正则表达式引擎更快,并且fixed = TRUE 更快(特别是当每个模式仅匹配几次时)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中传递给 grep() 的字符串长度是否有限制? 的相关文章

随机推荐