我有一个包含 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(使用前将#替换为@)