在 Word 文档中查找准确的数字

Find the exact digits in a Word Document

我试图在包含文本和数字的 Microsoft Word 文档中查找特定数字,但我不知道如何去做。为此,我想使用 VBA。

例如文档中的正文如下;

(1) 52.203-19, 这是一段文字 (2) 52.204-23,敏捷的棕狐跳过懒狗52次。 (3) 52.204-25,我尝试搜索解法52.204次。 (4) 52.2,虽然找不到任何运气 (5) 52.203,这让我大吃一惊 mac 2.36

现在我想找到整个数字“52.2”的确切数字,我不想找到 52.2[=32 的任何其他实例=] 是另一个数字的一​​部分,例如 52.203 或 52.204.

此外,当我想找到 52.203 时,我想排除所有实例,例如 52.203-xx,其中 xx 可以是任何两位数。

简而言之,我只想找到整个数字而不是数字之间的确切数字,就像 Excel 的 EXACT 函数一样。

我该怎么办?我应该使用 RegEx 还是应该通过 VBA 使用带有通配符的 Word 高级查找功能?这是我到目前为止所做的,没有任何运气,

Selection.Find.ClearFormatting
            With Selection.Find
                .Text = "52.2"
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindAsk
                .Format = False
                .MatchCase = False
                .MatchWholeWord = True
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
        Selection.Find.Execute

但这会找到我不想要的所有实例。

正则表达式似乎是解决此问题的方法。

首先,在 VBA 编辑器中转到 Tools > References,确保勾选 Microsoft VBScript Regular Expressions 5.5 库。

下面的代码对你的示例文本有效,只删除了“(4)”之后的“52.2”,而不影响周围的任何字符:

Sub removeNumber()

Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")

With regExp
    .Pattern = "\b52.2\b"
    .Global = True
    Selection.Text = .Replace(Selection.Text, "")
End With

End Sub

\b 表示单词边界,因此不会匹配“52.5”之前或之后的任何数字。

不需要正则表达式。您可以使用带通配符的查找。有关解释,请参阅 https://wordmvp.com/FAQs/General/UsingWildcards.htm

@TimothyRylatt 先生提出的解决方案非常适合我,特别是在添加 [!-] 以避免包含数字的连字符之后。但是,我需要通过 VBA 宏来实现这个解决方案,所以我像这样稍微修改了我的代码。

The working of Modified Code & the Code itself

Sub find_numbers()
      Dim Str As String
 'Create Search String for WildCard Search
  Str = "<" & "52.203" & ">" & "[!-]"
   Selection.Find.ClearFormatting
        With Selection.Find
            .Text = Str
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = True 'make this option true to use WildCards
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
    Selection.Find.Execute
 End Sub