使用通配符排除特定的字符串

使用通配符排除特定的字符串

我似乎无法想出适当的通配符(我想它必须是[!]),它可以从表达式中排除

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)^

其中|是分隔可选部分并且^是单词的结尾(注意使用()而不是[])。

相关内容