我试图理解R正则表达式中的花括号是如何工作的。帮助文件说:
{N} 前面的项目恰好匹配n次。
{N,} 前面的项目匹配n次或更多次。
{N,M} 前面的项目至少匹配n次,但不超过m次。
我有这样的矢量:
b <- c("aa", "aaa", "aaaa", "aaaaa")
当我这样做时
b[grep("a{2}", b)]
我希望它只返回“aa”,但我得到了一切。换句话说,它产生与
完全相同的结果b[grep("a{2,}", b)]
为什么?
答案 0 :(得分:4)
因为在此aaa
输入中a{2}
匹配前两个a
同样适用于所有其他元素。所以grep返回所有元素的索引。要进行精确的字符串匹配,您必须添加锚点。
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("^a{2}$", b)]
[1] "aa"
^
断言我们刚开始,$
声称我们已经结束了。所以上面的grep只返回恰好有两个a
的元素的索引,即1
。
或强>
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("\\ba{2}\\b", b)]
[1] "aa"
添加\b
字边界也适用于这种情况。