3

Я пытаюсь найти текст в Word 2010 в следующем формате: ABC.DEF.XYZ. По сути, это поиск ссылок на код с использованием синтаксиса Java, записанных в текстовом документе. Обратите внимание, что 3-элементная ссылка является лишь примером. Фактические ссылки имеют минимум 2 элемента и до 5 элементов.

Я попробовал множество комбинаций подстановочных знаков (и не подстановочных знаков), чтобы заставить это работать, но мне не повезло. Вот некоторые из вещей, которые я пробовал:

  1. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    ПРИМЕЧАНИЕ, это на самом деле работает, чтобы найти ссылку на 2 элемента. При нахождении шаблона в пределах более крупной строки он попадал или пропускал (например, соответствовал элементам 2 и 3 3-элементной ссылки).

  2. <([a-z0-9A-Z]@)>(.<([a-z0-9A-Z]@)>)@
    Выдает ошибку - неверный шаблон

  3. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    Запуск Word занял более 15 минут и не нашел ни одного совпадения (документ содержит около 150 страниц текста, поэтому, возможно, его было слишком много для обработки)

  4. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    Слово на самом деле рухнуло, когда я попробовал этот.

В идеале, я думаю, что рабочая версия # 2 была бы идеальной - однако я не знаю, как сделать шаблон действительным.

Если это невозможно, я мог бы просто использовать # 1 и надеяться, что он ловит все (не уверен, почему он соответствует определенным строкам и не соответствует другим).

Любая помощь с благодарностью.

2 ответа2

1

Вы можете использовать Word VBA RegEx движок вместо поиска по шаблону Word.


Хорошо, задача состояла в том, чтобы найти все строки со следующим шаблоном

###.###  
###.###.###
###.###.###.###
###.###.###.###.###

Лучший шаблон, который я мог создать, был

([\w\d]{3}\.){1,4}[\w\d]{3}

который возвращает следующие хиты, отмеченные желтым

Объяснение картины

  • \w соответствует одному символу из Az. Это без учета регистра
  • \d соответствует цифре 0-9
  • [\w\d]{3} соответствует 3 символам или цифрам, таким как ABC , abc , 123 , Ab1 но не A$C или ABCD
  • ([\w\d]{3}\.){1,4} сопоставляет 1,2,3 или 4 группы со следующей точкой \. , Последняя группа [\w\d]{3} не запрашивает следующую точку

Макрос VBA

Нажмите ALT+F11, чтобы открыть редактор VBA. Вставьте код в любое место и выполните его с помощью F5

Sub RegExMark()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")

    RegEx.Global = True
    RegEx.Pattern = "([\w\d]{3}\.){1,4}[\w\d]{3}"

    Set Matches = RegEx.Execute(ActiveDocument.Range)
    For Each hit In Matches
       Debug.Print hit
       ActiveDocument.Range(hit.FirstIndex, hit.FirstIndex + hit.Length). _
         HighlightColorIndex = wdYellow
    Next hit

End Sub

Предостережение

Как отмечено красным на примере изображения, текущий шаблон имеет недостаток и также соответствует подстрокам строк, которые являются слишком длинными. Я немного поиграл с \b , [^\.] И \s но ни один из них не работал для каждого случая. Может быть, другие пользователи могут найти правильное решение?

Использованные ресурсы

0

Я бы предложил скопировать текст в Notepad++, а затем использовать параметр RegEx для внесения изменений.

Я знаю, это звучит больно, но как только вы к этому привыкнете, вы сможете очень быстро переключаться между программами.

RegEx - это опция в окне поиска / замены в Notepad++. Другие редакторы имеют такую же функцию.

Иван

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .