使用正则表达式查找和替换Word交替运营商

时间:2014-11-13 07:05:27

标签: regex vba ms-word word-vba

使用正则表达式查找文本时,我在某处出错了。

这是我正在使用的代码。

findText = "(Event Handling|Event Handling \(EH\))"
Debug.Print findText
With Selection.Find
    .Text = findText
    .Replacement.Text = "Replaced"
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .matchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Find.Execute Replace:=wdReplaceAll

我试图在段落中找到Event HandlingEvent Handling (EH),但OR运算符无效。

当我试图单独找到Event Handling时,它正在工作。同样适用于Event Handling (EH)。但与OR运算符|一起,它不起作用。为什么呢?

2 个答案:

答案 0 :(得分:7)

Word的内置查找功能仅支持一组有限的正则表达式。如果你想使用完整的,通常的标准正则表达式,你必须做这样的事情:

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

With regExp
    .Pattern = "(Event Handling \(EH\)|Event Handling)"
    .Global = True
    Selection.Text = .Replace(Selection.Text, "Replaced")
End With

如果您选择了段落并运行此段落,则会按预期更换文本。但请注意Event Handling \(EH\)应该在搜索模式更改"(Event Handling \(EH\)|Event Handling)"中排在第一位,因为如果Event Handling在您最初编写时首先出现,它将首先被替换,留下任何(EH)背后。

或者,如果您想使用Word的内置Find,那么只需进行两次搜索 - 此处Event Handling \(EH\)也应该是第一次搜索:

'Settings
With Selection.Find
    .Replacement.text = "Replaced"
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

'First find
With Selection.Find
    .text = "Event Handling \(EH\)"
    .Execute Replace:=wdReplaceAll
End With

'Second find
With Selection.Find
    .text = "Event Handling"
    .Execute Replace:=wdReplaceAll
End With

答案 1 :(得分:1)

Microsoft Word的Find&替换可以使用正则表达式排序,但只能使用一组有限的功能。您需要在“高级”/“更多”下拉窗格中单击“使用通配符”选项。

这篇MVP文章记录了如何使用它:Finding and replacing characters using wildcards