【发布时间】:2021-03-27 11:10:07
【问题描述】:
您好,我需要您在 LibreOffice 6.4 Calc 中使用 Regex 的帮助。
情况:
我有一个相当复杂的文件,其中有很多工作表使用单元格中的公式相互引用。现在我需要在大约 10 多个工作表中批量更新公式,每个工作表都引用具有很多公式的各种工作表...
使用Find and Replace 和Regular expressions 可以非常有效地替换公式。我需要匹配sheet name 和row 和column。事实上,我需要删除固定锚点,即 =Sheet1_2.$A$1 在该示例的许多变体上变为 =Sheet1_2.A1,即不同的工作表名称、列和行...
但是,在匹配名称中带有下划线的工作表名称时,我遇到了奇怪的问题,例如名为 Sheet1_2 的工作表。
示例文件:
这是我工作的文档的非常简化的示例:
- 使用两个名为
Sheet1和Sheet1_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
问题:
我是否遗漏了什么或者在单元格公式中将工作表名称与下划线匹配的正确方法是什么?
【问题讨论】:
-
这个字符串没有前导下划线
=Sheet1_2.$A$1你可以让它可选(\$?[A-Za-z0-9_]*\.)\$([A-Z])\$ -
@Thefourthbird 哎呀,这是一个错字。工作表名称在公式中始终具有前面的美元符号。我已经更新了这个问题。感谢您通知我;)工作表名称仍然不匹配。
-
您不必转义字符类中的下划线顺便说一句,但您能检查一下这是否有效吗?也许还有另一个字符
(\$[^.]+\.)\$([A-Z])\$ -
(\$.*\.)\$([A-Z]*)\$也不匹配。.*与下划线不匹配。也许它是 Calc 中的一个错误。 -
该死的。我的测试表中有错字!我错过了
$A$1。所以正确的正则表达式是(\$[A-Za-z0-9_]*\.)\$?([A-Z])\$?谢谢你们与我一起排除故障@JvdV 和@Thefourthbird。将其标记为已解决。
标签: regex libreoffice libreoffice-calc