我似乎无法想出适当的通配符(我想它必须是[!]
),它可以从表达式中排除
argument[oales]{1,4}
以下三个词
争论操作系统
争论A
争论作为
换句话说,我希望它只找到以下三个词
争论o
争论艾尔
争论麦酒
所以也许这种表达方式argument[oales]{1,4}
一开始就不合适。
请注意,我实际上是在尝试寻找一种“模式表达”,以便可以将其与任何其他形态词族一起使用;因此,这三个词仅仅是例子。
我会在宏中使用此模式,并可能在“查找和替换”选项中使用此模式,以批量实现替换。
否则,某些插件或第三方“搜索和替换”软件工具可以完成这项工作吗?
更新
这是我正在使用的宏。
Sub ReplaceFromTableList()
Dim oChanges As Document, oDoc As Document
Dim oTable As Table
Dim oRng As Range
Dim rFindText As Range, rReplacement As Range
Dim i As Long
Dim sFname As String
Dim sAsk As String
sFname = "C:\Users\Win7\Desktop\macro.docx" 'The table document
Set oDoc = ActiveDocument
Set oChanges = Documents.Open(FileName:=sFname, Visible:=False)
Set oTable = oChanges.Tables(1)
For i = 1 To oTable.Rows.Count
Set oRng = oDoc.Range
Set rFindText = oTable.Cell(i, 1).Range
rFindText.End = rFindText.End - 1
Set rReplacement = oTable.Cell(i, 2).Range
rReplacement.End = rReplacement.End - 1
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
Do While .Execute(FindText:=rFindText, _
MatchCase:=True, _
MatchWholeWord:=True, _
MatchWildcards:=True, _
Forward:=True, _
Wrap:=wdFindStop) = True
oRng.Select
'oRng.FormattedText = rReplacement.FormattedText
oRng.Text = rReplacement.Text
oRng.Collapse wdCollapseEnd
Loop
End With
Next i
oChanges.Close wdDoNotSaveChanges
lbl_Exit:
Exit Sub
End Sub
在运行时错误 5692 之后进行调试时,宏的以下部分
Do While .Execute(FindText:=rFindText, _
MatchCase:=True, _
MatchWholeWord:=True, _
MatchWildcards:=True, _
Forward:=True, _
Wrap:=wdFindStop) = True
以黄色显示,由 Microsoft Word 选定。
答案1
不幸的是,Word 中的正则表达式既不支持替代项|
,也不支持“零个或多个”量词(*
或{0,1}
),所以恐怕没有直接的方法可以做到这一点。
您需要在单独的搜索中查找每个表格。
更新
重新阅读你的问题我意识到你会在宏中使用它,幸运的是正则表达式不同,你可以使用:
argument(o|al|ales)^
其中|
是分隔可选部分并且^
是单词的结尾(注意使用()
而不是[]
)。