tl;dr: agrep(..., fixed=F)
似乎不适用于“|”特点。使用aregexec
.
经过进一步调查,我认为这是一个错误,并且agrep(..., fixed=F)
does not似乎与“|”一起使用正则表达式(虽然adist(..., fixed=F)
does).
要详细说明,请注意
adist('(asdf|fdsa)', 'asdf', fixed=T) # 7
nchar('(asdf|fdsa)') # 11
如果“asdf”是agrep
到非正则表达式字符串 '(asdf|fdsa)',则距离为 7。
关于这一点:
agrep('(asdf|fdsa)', 'asdf', fixed=F, max.distance=7) # 1
agrep('(asdf|fdsa)', 'asdf', fixed=F, max.distance=6) # integer(0)
这些是我期望的结果fixed=T
. If fixed=F
,我的正则表达式将匹配“asdf”exactly并且距离将为 0,所以我总是会得到“1”的结果agrep
.
所以看起来agrep(pattern, x, fixed=F)
不起作用,即它实际上考虑到fixed
对于这种模式为 TRUE。
正如@Arun 提到的,它可能只是“|”不起作用的正则表达式。例如,agrep('la[sb]y', 'lazy', fixed=FALSE)
does按预期工作。
编辑:解决方法(感谢@Arun)
功能aregexec
似乎有效。
> aregexec('(asdf|fdsa)', 'asdf', fixed=F)
[[1]]
[1] 1 1
attr(,"match.length")
[1] 4 4