正则表达式匹配单元格公式,其中工作表名称与 LibreOffice Calc 中的 uderscore aka Sheet1_2

问题描述

您好,我需要您帮助使用 LibreOffice 6.4 Calc 中的 Regex。

情况:

我有非常复杂的文件,其中有很多工作表使用单元格中的公式相互引用。现在我需要在大约 10 多个工作表中批量更新公式,每个工作表都引用了带有很多公式的各种工作表...

使用Find and ReplaceRegular expressions 可以非常有效地替换公式。我需要匹配 sheet namerowcolumn。事实上,我需要删除固定锚点,即 =Sheet1_2.$A$1 在该示例的许多变体上变为 =Sheet1_2.A1,即不同的工作表名称、列和行...

但是,我在匹配名称中带有下划线的工作表名称时遇到了奇怪的问题,例如名为 Sheet1_2 的工作表。

示例文件

这是我工作的文档的非常简化的示例:

  1. 使用名为 Sheet1Sheet1_2 的两张工作表创建新电子表格。
  2. Sheet1 的第一个单元格中输入公式 =$Sheet1_2.$A$1

更换动作:

Find and Replace 对话框中,我有以下设置:

  • 查找:(\$[A-Za-z0-9\_]*\.)\$([A-Z])\$
  • 替换:$1$2
  • 搜索Formulas
  • 其他选项:[x] Regular expressions

查找全部结果:

  • =$Sheet2.$B$1 匹配(无下划线)
  • =$Sheet1_2.$A$1 不匹配(下划线)

官方帮助确实提到了转义:LibreOffice 6.4 Help - List of Regular Expressions

问题:

我是否遗漏了什么,或者在单元格公式中将工作表名称与下划线匹配的正确方法是什么?

解决方法

最后我发现问题不是下划线 '~key1' 而是我的测试文件中的错字,其中有一些带有和不带有锚点的变体,例如 _=$Sheet2_1.A1

正确的正则表达式是可选的美元:=$Sheet2_1.$A$1。注意:当然,下划线不需要转义。

感谢@Thefourthbird 和@JvdV 进行故障排除;)