【问题标题】:REGEXEXTRACT with capturing group带有捕获组的 REGEXEXTRACT
【发布时间】:2018-01-30 11:55:12
【问题描述】:

我想知道在 Google 表格中使用 REGEXEXTRACT() 时是否可以引用以相同表达式捕获的组?

假设我们有一个示例字符串: aaa123bbb123ccc456ddd123eee123fff456ggg

我们想提取一些 3 位数字至少出现 3 次的部分。 通常我会像这样使用正则表达式: (\d{3})(?:[^\1]*\1){2,}

但是如何引用第一组 =REGEXEXTRACT(A1;"(\d{3})(?:[^\1]*\1){2,}")? 这会在表格中返回错误。

【问题讨论】:

  • 只需使用(\d{3})(?:.*\1){2,}

标签: regex google-sheets


【解决方案1】:

RE2 模式中不支持反向引用,需要编写自定义 JS 函数来获取所需的内容:

function IS_THREE_DIGIT_REPEATING(input) {
  var rx = /(\d{3})(.*\1){2}/;
  var res = rx.exec(input);
  return res ? res[1] : "No";
}

它将打印单元格中第一个捕获组的内容(重复的 3 位数字)或 No 如果没有匹配项。

模式详情

  • (\d{3}) - 捕获组 1:三位数字
  • (.*\1){2} - 连续出现 2 次除换行符以外的任何 0+ 字符,其后跟在第 1 组中捕获的值相同。

【讨论】:

    【解决方案2】:

    我在 google 表格中模拟捕获组行为的方式是使用 REGEXEXTRACT Inline with REGEXREPLACE 购买

    例如

    =REGEXREPLACE(A1, "word$", "special" & REGEXEXTRACT(A1, "word$"))
    

    解释:

    # REGEXREPLACE(my_cell, regex_to_match_word, text & capture_function)
    =REGEXREPLACE(
        A1, 
        "word$", 
        "special" & 
            # REGEXEXTRACT("my_cell", "capture_regex")
            REGEXEXTRACT(
                A1, 
                "word$"
            )
    )
    

    参考文献

    正则表达式替换:https://support.google.com/docs/answer/3098245?hl=en

    正则表达式:https://support.google.com/docs/answer/3098244?hl=en

    【讨论】:

      【解决方案3】:

      如果没有脚本,您可能会发现一个组的第 N 次出现:

      =REGEXEXTRACT("aaa123bbb123ccc456ddd123eee123fff456ggg","(\d{3}\D*){3}")

      结果是:

      456ddd

      或者这个 re 仅用于数字:

      (?:(\d{3})(?:\D*)){3}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2014-09-23
        相关资源
        最近更新 更多