Исключая разделители с поиском в MS Word - PullRequest
2 голосов
/ 14 марта 2012

Скажем, у меня есть следующая строка:

"Hello how are you."

Поскольку MS Word допускает регулярные выражения, я могу использовать "*", чтобы найти полную строку.Но что, если я хочу исключить разделители (кавычки)?Боюсь, что MS Word не поддерживает ни один из двух методов, объясненных здесь .Мой вопрос: есть ли способ сделать это в одном поисковом запросе?Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 14 марта 2012

Существуют разные способы достижения того, что вы хотите. Вот один из способов найти текст в VBA Word без разделителей , используя Regex . Допустим, у вас есть следующий текст в документе Word (не копируйте и не вставляйте его отсюда, поскольку веб-сайт искажает двойные кавычки. См. Скриншот)

Это образец

"Это еще один образец"

"Разбуди меня, прежде чем идти"

"Война миров"

Код для возврата текста с использованием регулярных выражений между двумя кавычками:

Sub FindText()
      Dim regEx, Match, Matches

      Set regEx = New RegExp
      regEx.Pattern = "([^“]*)(?=\”)"

      regEx.IgnoreCase = False
      regEx.Global = True

      Set Matches = regEx.Execute(ActiveDocument.Range.Text)

      For Each Match In Matches
         Debug.Print Match.Value
      Next
End Sub

и если вы хотите сказать, найти "Wake me up before you go go" без кавычек, то вы также можете использовать это

Sub FindText()
      Dim regEx, Match, Matches
      Dim searchText As String

      searchText = "Wake me up before you go go"
      Set regEx = New RegExp
      regEx.Pattern = "([^“]*)(?=\”)"

      regEx.IgnoreCase = False
      regEx.Global = True

      Set Matches = regEx.Execute(ActiveDocument.Range.Text)

      For Each Match In Matches
         If Trim(Match.Value) = (searchText) Then
            Debug.Print "Found"
         End If
      Next
End Sub

ПРИМЕЧАНИЕ: Сайт искажает фактическую двойную кавычку, поэтому я публикую скриншоты.

enter image description here

Followup

Для примера файла, который вы разместили, используйте этот код

Sub FindText()
    Dim regEx, Match, Matches

    Set regEx = New RegExp
    regEx.Pattern = """([^""]*)"""
    regEx.IgnoreCase = False
    regEx.Global = True

    Set Matches = regEx.Execute(ActiveDocument.Range.Text)

    For Each Match In Matches
        Debug.Print Match.SubMatches(0)
    Next
End Sub

Образец файла можно скачать здесь. Обратите внимание, что эта ссылка будет активна в течение 7 дней.

Образец файла

НТН

* * Сид тысяча сорок-девять
0 голосов
/ 13 сентября 2013

Мне повезло, используя цвет («Формат» <Шрифт в диалоговом окне «Поиск», когда вы нажали «Найти что»), чтобы решить подобные проблемы. Выполните поиск по всему содержимому с разделителями («*» с подстановочными знаками, отмеченными для этого примера) и замените его использованием не черного цвета, такого как синий. Найдите и замените разделитель (в данном случае кавычки) цветом с синего на черный. Внесите изменения в содержание синим цветом. Выберите все и измените на черный. Если это происходит часто, я бы предложил макросы на панели инструментов для первого шага (синий, снимите синий с разделителя) и второго шага (измените все на черный). </p>

0 голосов
/ 15 марта 2012

Некоторые версии MS Word поддерживают группы в стиле регулярных выражений с их опцией «поиск с подстановочными знаками», что означает, что если вы можете создать поисковое выражение между двумя кавычками - то, что мне подходит, это "?@" - вы можете измените его на "(?@)" и введите \1 для замены текста. Это заменит найденный текст только тем текстом, который соответствует выражению в скобках, избавляя вас от кавычек. (MS Word ?@ эквивалентно .* (не жадный) в обычном регулярном выражении.)

Это работает для меня в Word 2008 для Mac, но у меня нет руководства о том, какие версии Office поддерживают этот синтаксис.

Осторожно! В этой форме поиска Word не приравнивает прямые кавычки на клавиатуре к фигурным кавычкам, которые он вставляет, чтобы выглядеть красиво. Вам нужно будет либо отключить «умные кавычки» для этого документа, либо создать поисковую фразу, обрезав и вставив символы открывающей и закрывающей кавычек в документе.

0 голосов
/ 14 марта 2012

Хотя в Ms-Word никогда не будет всего, что вы хотите, например, как этот, где вы хотите найти что-то еще, но хотите выбрать только его часть, всегда есть макросы, которые вы можете запрограммировать для выполнения своей задачи.

Добавьте следующий код VBA в ваш документ. Вы можете добавить пользовательскую кнопку на панели инструментов, чтобы вызвать ее.

Sub FindSpecial()
    FindSpecialA
End Sub

Private Sub FindSpecialA(Optional text As String)
    Dim ToFind As String

    ToFind = InputBox("Enter the text you want to find in double-quotes (without double-quotes):" & vbCrLf & vbCrLf & "(Enter * to match anything within double-quotes)", "Find", text)
    If ToFind = "" Then Exit Sub

    Selection.Find.ClearFormatting
    With Selection.Find
        .text = """" & ToFind & """"
        .Replacement.text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        If ToFind = "*" Then
            .text = "[“""]*[”""]"
            .MatchWildcards = True
        End If
    End With
    Selection.Find.Execute
    If Selection.Find.Found Then
        Selection.MoveStart unit:=wdCharacter, Count:=1
        Selection.MoveEnd unit:=wdCharacter, Count:=-1
        FindSpecialA ToFind
    Else
        MsgBox "Not found!"
    End If
End Sub

EDIT:

Обновлен код для обработки совпадений * с подстановочными знаками.

0 голосов
/ 14 марта 2012

Вы не правы.Word поддерживает некоторые символы подстановки, ? для одного символа и * для серии символов.

Это не регулярное выражение

означает не смотреть назад и не смотреть вперед

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...