R 正则表达式中的大括号如何工作?
How do curly braces in R regex work?
我想了解 R 正则表达式中花括号的工作原理。帮助文件说:
{n}
前一项恰好匹配n次
{n,}
前面的项目匹配了 n 次或更多次。
{n,m}
前一项至少匹配n次,但不超过m次。
我有一个这样的向量:
b <- c("aa", "aaa", "aaaa", "aaaaa")
当我做的时候
b[grep("a{2}", b)]
我希望它 return 只有 "aa" 但我得到了一切。换句话说,它产生与
完全相同的结果
b[grep("a{2,}", b)]
为什么?
因为在这个 aaa
中输入 a{2}
匹配前两个 a
同样适用于所有其他元素。所以 grep returns 所有元素的索引。要进行精确的字符串匹配,您必须添加锚点。
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("^a{2}$", b)]
[1] "aa"
^
断言我们在起点,$
断言我们在终点。所以上面的 grep returns 只有恰好有两个 a
的元素的索引,即 1
.
或
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("\ba{2}\b", b)]
[1] "aa"
添加 \b
字边界也适用于这种情况。
我想了解 R 正则表达式中花括号的工作原理。帮助文件说:
{n} 前一项恰好匹配n次
{n,} 前面的项目匹配了 n 次或更多次。
{n,m} 前一项至少匹配n次,但不超过m次。
我有一个这样的向量:
b <- c("aa", "aaa", "aaaa", "aaaaa")
当我做的时候
b[grep("a{2}", b)]
我希望它 return 只有 "aa" 但我得到了一切。换句话说,它产生与
完全相同的结果b[grep("a{2,}", b)]
为什么?
因为在这个 aaa
中输入 a{2}
匹配前两个 a
同样适用于所有其他元素。所以 grep returns 所有元素的索引。要进行精确的字符串匹配,您必须添加锚点。
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("^a{2}$", b)]
[1] "aa"
^
断言我们在起点,$
断言我们在终点。所以上面的 grep returns 只有恰好有两个 a
的元素的索引,即 1
.
或
> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("\ba{2}\b", b)]
[1] "aa"
添加 \b
字边界也适用于这种情况。