使用RegEx和粗体查找单词

时间:2014-06-10 10:26:59

标签: regex vba ms-word word-vba

我有一个word文档,我想找到所有单词,如下所示:ABC-12:123456 DEF。如果在文档中找到这个词,则应选择该词并以粗体显示。 (稍后我会添加超链接而不是粗体)。我已成功找到该单词并将其放入MatchCollection中以尝试RegExp。它看起来像:

Sub searchDocument()
    Set matchPattern = New RegExp
    matchPattern.Pattern = "ABC-\d{2}:\d{6} DEF"
    matchPattern.Global = True

    Dim matchPatternWords As MatchCollection
    Set matchPatternWords = matchPattern.Execute(ActiveDocument.Range)

    For Each matchPatternWord In matchPatternWords
        MsgBox (matchPatternWord)
    Next matchPatternWord
End Sub

1 个答案:

答案 0 :(得分:2)

您需要从正则表达式匹配转到表示匹配的范围对象。

matchRange = ActiveDocument.Range
  (matchPatternWord.FirstIndex, matchPatternWord.FirstIndex+matchPatternWord.Length)

将是明显的调用。

然而this post表示此方法可能存在问题,因为格式化可能会弄乱字符数。这是从2010年开始的,所以现在问题可能会以更好的方式得到解决。

如果上述方法不起作用,或者您不相信,则可以这样做;

matchRange = ActiveDocument.Range.Find(FindText:=matchPatternWord.Value)

如果同一个词的多次出现是可能的话,后者需要更多的处理。

一旦你有了范围就可以直接进行。

matchRange.Bold = True