使用正则表达式查找文本时,我在某处出错了。
这是我正在使用的代码。
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 Handling
或Event Handling (EH)
,但OR运算符无效。
当我试图单独找到Event Handling
时,它正在工作。同样适用于Event Handling (EH)
。但与OR运算符|
一起,它不起作用。为什么呢?
答案 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