正则表达式在Google表格中令人反感

时间:2018-12-22 16:38:54

标签: regex google-sheets

我有一个带有交易清单的Google表格。我需要在D列中的“ end”一词之后的E列中最多隔离三个单词或数字。正确的正则表达式函数应该是正向后缀,但RE2不支持该正则表达式(来源:{{3 }}。

此公式在GSheets中返回错误: = REGEXEXTRACT(D1;“(?<= end \ s)(\ w +)”),所以我的意思是在这种情况下regex是死胡同。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

请参见online demo(Golang regex也使用RE2)。

详细信息

  • end-end
  • \s*-超过0个空格
  • (\w+(?:\s+\w+){0,2})-捕获组1:
    • \w+-1个以上的字符字符(字母,数字或_
    • (?:\s+\w+){0,2}-出现0、1或2次
      • \s+-超过1个空格
      • \w+-1个以上的字符字符。

答案 1 :(得分:0)

如果您迫切需要除RE2之外的其他RegEx后端,则可以使用App脚本创建一个自定义函数,该函数使用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;
}