【问题标题】:How do curly braces in R regex work?R 正则表达式中的花括号如何工作?
【发布时间】:2023-03-06 00:37:01
【问题描述】:

我试图了解 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)]

为什么?

【问题讨论】:

    标签: regex r curly-braces


    【解决方案1】:

    因为在这个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 字边界也适用于这种情况。

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多