REGEXEXTRACT与捕获组

时间:2018-01-30 11:55:12

标签: regex google-sheets

我想知道在Google表格中使用REGEXEXTRACT()时是否有办法引用在同一表达式中捕获的群组?

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

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

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

2 个答案:

答案 0 :(得分:4)

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

enter image description here

模式详情

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

答案 1 :(得分:0)

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

例如

await

解释:

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

参考

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

REGEXEXTRACT:https://support.google.com/docs/answer/3098244?hl=en