【发布时间】:2020-12-01 14:24:25
【问题描述】:
我正在尝试提取在 Google 表格单元格的公式中出现的所有单元格/范围地址。
公式本质上可能非常复杂。我尝试了许多模式,它们在网络测试人员中有效,但在 google sheet re2 上无效。
以下示例显示了两个问题。也许我误读了匹配结果,但据我了解,有 4 个匹配项。
公式(忽略逻辑):
=A$13:B4+$BC$12+$DE2+F2:G2
正则表达式:
((\$?[A-Z]+\$?\d+)(:(\$?[A-Z]+\$?\d+))?)
预期结果:
[A$13:B4,$BC$12,$DE2,F2:G2]
Here(如果我没有误读结果)看起来还可以。 我不确定显示的 组匹配 是否也被视为匹配项,因为它声明了 “4 个匹配项,287 步”
但是在 google 表格中返回所有 Match 1 结果
[A$13:B4,A$13,:B4,B4]
忽略其他匹配项 所以我想问题是如何将正则表达式转换为 re2 语法?
更新: 关注player0 cmets,可能我并不清楚。 这只是一个简单的示例,以隔离我遇到的其他问题。这只是一个包含几种相对和绝对格式的地址的字符串。 但是,我正在寻找一个更广泛的通用解决方案,该解决方案将适合任何可能包含公式和对其他工作表的引用的公式。例如:
=(STDEVA(Sheet1!B2:B5)+sum($A$1:$A$2))*B2
这里的预期结果是Sheet1!B2:B5,$A$1:$A$2,B2
此公式包含两个公式并引用另一个工作表。 仍然在这里忽略命名范围和其他我目前无法想到的公式可能的参考。 此外,方括号 [] 无关紧要,它只是显示结果的方式,实际上是从日志中复制的,因为它都是在脚本中完成的。
【问题讨论】:
-
分享您的工作表副本以及所需输出的示例
-
如果不使用任何捕获组怎么办?
\$?[A-Z]+\$?\d+(?::(?:\$?[A-Z]+\$?\d+))?regex101.com/r/A5yKb5/1 -
@player0 猜我还不够清楚。请查看我的编辑。
-
@Thefourthbird 因为我不是正则表达式大师,所以我并不完全理解分组的用法,但我知道它会阻止分组匹配。无论如何,在谷歌表格中仍然只返回第一场比赛
A$13:B4
标签: regex google-sheets google-sheets-formula re2