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

use*_*123 4 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
Run Code Online (Sandbox Code Playgroud)

我试图找到Event HandlingEvent Handling (EH)在通道中,但OR运算符不工作.

当我试图Event Handling单独找到它的时候.同样的Event Handling (EH).但是与OR运算符一起|它不起作用.为什么?

Jea*_*ett 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
Run Code Online (Sandbox Code Playgroud)

如果您选择了段落并运行此段落,则会按预期更换文本.但请注意,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
Run Code Online (Sandbox Code Playgroud)