【发布时间】:2019-07-15 08:57:16
【问题描述】:
我的 .docx 文件中有几个表格。在这些表中的数字中,一些十进制数字出现,如“43,0”和“2,300”。我在 VBA 中编写了一个脚本来删除所有尾随零:
Sub DeleteTrailingZeros()
Application.ScreenUpdating = False
Dim Tbl As Word.table
For Each Tbl In ActiveDocument.Tables
With Tbl.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = True
.Text = "(\,\d*?[1-9])0+$"
.Replacement.Text = "\1"
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindStop
End With
Next Tbl
End Sub
但是,它不起作用。可能是什么问题?
已编辑: 基于正则表达式的版本。该模式似乎是正确的,但没有找到任何东西。表达式的耦合部分似乎没有被正确替换,而只是被删除了。不知道为什么会这样。
Sub DeleteTrailZerosRegExp()
Set Location = ActiveDocument.Range
Dim j As Long
Dim regexp As Object
Dim Foundmatches As Object
Set regexp = CreateObject("VBScript.RegExp")
With regexp
.Pattern = "([\,]\d*?[1-9])0+$"
.IgnoreCase = True
.Global = True
Set Foundmatches = .Execute(Location.Text)
For j = Foundmatches.Count - 1 To 0 Step -1
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Hidden = True
.Text = Foundmatches(j)
.Replacement.Text = regexp.Replace(Foundmatches(j), "$1")
.Execute Replace:=wdReplaceAll
End With
Next j
End With
End Sub
【问题讨论】:
-
Range.Find不支持正则表达式,只支持通配符。 -
谢谢。我的搜索导致为 .Text 选项写入模式“([\,][1-9]{0,})0@”。它因格式错误而失败。
-
是的,我现在无法检查,但
{0,}不起作用,通配符不支持 零或多个 概念。它们只是无法匹配可选模式,这就是它们不是正则表达式的原因。 -
您能告诉我如何使用正则表达式重写上面的代码吗?