【问题标题】:Regex positive lookbehind in Google SheetsGoogle表格中的正则表达式正向向后看
【发布时间】:2019-05-22 16:11:14
【问题描述】:

我有一个包含交易清单的 Google 表格。我需要在 D 列中的单词“end”之后的 E 列中隔离最多三个单词或数字。正确的正则表达式函数应该是正则表达式,但 RE2 不支持它(来源:Using positive-lookahead (?=regex) with re2 )。

此公式在 GSheets 中返回错误:

=REGEXEXTRACT(D1;"(?<=end\s)(\w+)")

所以我的结论是,在这种情况下,正则表达式是一个死胡同。

如何在 GSheets 中获取请求的结果?

【问题讨论】:

  • 你不能用=REGEXEXTRACT(D1;"end\s*(\w+)")吗?您能否提供一个 D1 中的字符串示例和预期结果?如果您需要 1、2 或 3 个空格分隔的单词,则需要类似 "end\s*(\w+(?:\s+\w+){0,2})"

标签: regex google-sheets


【解决方案1】:

您可以在您的正则表达式中使用捕获组来使 REGEXEXTRACT 仅返回捕获的部分:

=REGEXEXTRACT(D1;"end\s*(\w+)")

如果您需要在end 之后返回 1、2 或 3 个空格分隔的单词,请使用

=REGEXEXTRACT(D1;"end\s*(\w+(?:\s+\w+){0,2})")

参见online demo(Golang 正则表达式也使用 RE2)。

详情

  • end - end
  • \s* - 0+ 个空格
  • (\w+(?:\s+\w+){0,2}) - 捕获组 1:
    • \w+ - 1+ 个单词字符(字母、数字或 _
    • (?:\s+\w+){0,2} - 0、1 或 2 次
      • \s+ - 1+ 个空格
      • \w+ - 1+ 个单词字符。

【讨论】:

    【解决方案2】:

    如果您迫切需要 RE2 以外的其他 RegEx 后端,您可以使用 App Script 创建一个自定义函数,该函数使用 JS 来评估 RegEx。

    1. 点击工具 > 脚本编辑器
    2. 在编辑器中添加您的自定义 JS RegEx 函数。您可以使用下面的示例。
    3. 给它起个名字JS_REGEXEXTRACT 是一个不错的选择。
    4. 点击工具栏中的保存按钮。
    5. 返回包含工作表的浏览器选项卡,并将REGEXEXTRACT 替换为JS_REGEXEXTRACT

    您现在有了一个有效的 JS 基础 RegEx 选项。它不会像 RE2 实现那么快,因此在处理具有复杂表达式的大型数据集时要小心。

    /**
     * Extracts matching substrings according to a regular expression using JS not RE2.
     *
     * @param {"abcdefg"} text The input text.
     * @param {"c.*f"} regular_expression The first part of `text` that matches this expression will be returned.
     * @return Extracts matching substrings according to a regular expression.
     * @customfunction
     */
    function JS_REGEXEXTRACT(text, regular_expression) {
      if (text.length < 1) {
        return null;
      }
      matches = text.match(new RegExp(regular_expression))
      if (matches && matches.length >= 1) {
        return matches[1];
      }
      return matches;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多