正则表达式匹配单元格公式,其中工作表名称与 LibreOffice Calc 中的 uderscore aka Sheet1_2
Posted
技术标签:
【中文标题】正则表达式匹配单元格公式,其中工作表名称与 LibreOffice Calc 中的 uderscore aka Sheet1_2【英文标题】:Regex to match cell formulas where is sheet name with uderscore aka Sheet1_2 in LibreOffice Calc 【发布时间】: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。将其标记为已解决。
【参考方案1】:
最后正确,我发现问题不是下划线_
,而是我的测试文件中的错字,其中有一些带有和不带有锚点的变体,例如=$Sheet2_1.A1
、=$Sheet2_1.$A$1
正确的正则表达式是可选的美元:(\$[A-Za-z0-9\_]*\.)\$?([A-Z])\$?
。注意:当然,下划线不需要转义。
感谢@Thefourthbird 和@JvdV 排除故障;)
【讨论】:
以上是关于正则表达式匹配单元格公式,其中工作表名称与 LibreOffice Calc 中的 uderscore aka Sheet1_2的主要内容,如果未能解决你的问题,请参考以下文章