繁体   English   中英

在VBA中使用Regex隐藏Word中的匹配项

[英]Hide matches in a Word using Regex in VBA

一段时间以来,我一直在VBA中使用Regex,并且能够在regex中找到不同的值或替换它们,或者寻找子字符串并替换它们。 但是,我要隐藏的特定值的作用类似于Word的本机查找和替换。 正则表达式有什么办法做到这一点吗?

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Hidden = True
Selection.Find.Replacement.Highlight = False
With Selection.Find
    .Text = "\<*\>"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindAsk
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

我想用正则表达式来做到这一点。 例如这样的:

regEx.Pattern = (\[[^\[]*?\]|<[^<]*?>|^http.*?$)
regEx.Global = True
If regEx.Test(strSource) Then
    Set matches = regEx.Execute(strSource)
    Selection.Text=matches                            
    Selection.Font.Hidden = True
End If

这个想法是将匹配的值分配给选定的文本,但又不会丢失其余所有内容,以便能够隐藏与正则表达式匹配的值。

谢谢,

我认为最简单(虽然可能不是最有效)的方法是将两种方法结合起来

    Dim rng As Range
    Dim mtch as Object
    Set rng = ActiveDocument.Range 'or whatever

    'set regex values and execute
    With regEx
        'your options here
        .pattern = strPattern
        Set matches = .Execute(rng.Text)
    End With

    'hide matches
    For Each mtch In matches
        With rng.Find
            'your options here
            .Text = mtch.Value
            .Replacement.Font.Hidden = True
            .Execute Replace:=wdReplaceAll
        End With
    Next mtch

如果您有很多重复的匹配项,这将进行很多不必要的搜索,因此您必须找到消除重复项的方法(例如字典)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM