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 Handling
或Event Handling (EH)
在通道中,但OR运算符不工作.
当我试图Event Handling
单独找到它的时候.同样的Event Handling (EH)
.但是与OR运算符一起|
它不起作用.为什么?
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)