Как использовать RegEx в Microsoft Word - Советы по Excel

Лисса спрашивает:

Есть ли способ изменить число (всегда случайное число) после слова лиса? Пример: лиса 23, медведь 1, лиса 398, лягушка 12, лиса 15. Я хочу изменить номер на тот же цвет, что и у слова лиса.

Мы можем найти и заменить по формату в Microsoft Word. Это отличная функция для быстрого поиска форматированного текста и даже замены всего текстового формата в документе.

На ленте выберите Расширенный поиск.

Диалог поиска и замены

Введите текст, который нужно найти, затем нажмите кнопку «Еще», чтобы просмотреть дополнительные параметры, и нажмите кнопку «Форматировать».

Расширенные параметры поиска

Выберите параметр «Шрифт» в настройках, после чего вы можете настроить цвет текста, который вы хотели бы найти в документе. Нажмите OK, чтобы закрыть диалоговое окно «Найти шрифт».

Выберите цвет текста в диалоговом окне «Найти шрифт».

Нажмите «Найти далее», и вы увидите, что будет выделено первое появление искомого текста определенного цвета.

Найдите «Далее», чтобы найти первое появление.

Мы также можем выполнять более сложный поиск, используя подстановочные знаки. Однако встроенный поисковый модуль Word не позволяет нам выполнять поиск, как просила Лисса.

Вот где мы можем вызвать RegEx в игре!

Библиотека регулярных выражений VBSCript

VBA не поддерживает регулярные выражения. Однако библиотека Microsoft VBScript содержит мощные возможности регулярных выражений. Эта библиотека является частью Internet Explorer 5.5 и более поздних версий, поэтому она доступна на всех компьютерах под управлением Windows XP, Vista, 7, 8, 8.1 или 10.

Пользователи Mac

Поскольку Internet Explorer не является приложением для Mac, этой библиотеки на Mac не существует. Поэтому приведенные ниже примеры VBA не работают на Mac.

Чтобы использовать эту библиотеку в VBA, переключитесь на VBE, выберите «Проект и ссылки» в меню VBE, затем прокрутите список вниз, чтобы найти элемент «Microsoft VBScript Regular Expressions 5.5», и отметьте его, чтобы включить в приложение.

Библиотека регулярных выражений VBScript

Вставьте новый модуль, скопируйте и вставьте в этот модуль следующий код.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Эта процедура берет образец текста, находит коды продуктов по заданному шаблону, который начинается с «лисы», одного пробела и числа, и печатает совпадающие коды в окне «Немедленное» (нажмите Ctrl + G в VBE, если это не так. видно уже).

Соответствующие коды продуктов напечатаны в окне «Немедленное».

d+ класс символов в шаблоне определяет один или несколько числовых символов, а шаблон - это в основном префикс «лиса», за которым следует пробел, за которым следуют числа.

Больше информации

Посетите раздел «Язык регулярных выражений» - краткий справочник для получения дополнительной информации о escape-символах, классах символов и привязках.

Скопируйте и вставьте следующий код, чтобы увидеть RegEx в действии по удалению пробелов из кодов продуктов.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Эта процедура заменяет образец текстового содержимого, удаляя пробелы из кодов продуктов, соответствующих заданному шаблону, и печатает текст результата в окне «Немедленное».

Замененный текст, напечатанный в окне «Немедленное».

Обратите внимание, что шаблон немного отличается от первого кода. Термины в этом шаблоне заключены в круглые скобки, а соответствующие термины используются в методе Replace как $ 1 и $ 2 по порядку. Эта процедура просто объединяет два термина без пробелов.

Вернуться к вопросу

Вернемся к образцу текста, который мы использовали в начале этой статьи.

Образец текста

Нам нужно найти «лису», за которой следуют числовые символы, и изменить соответствие, используя цвет раздела «лиса» в сопоставленном тексте.

Хотя RegEx очень хорошо соответствует заданному шаблону, он не может заменить цвет текста в документе Word. Итак, мы объединим методы RegEx и Word VBA в следующей процедуре.

Вот шаги:

  1. Найдите совпадения с помощью RegEx.
  2. Найдите каждый совпавший текст с помощью метода поиска слова.
  3. Найдите цвет первого слова в найденном диапазоне.
  4. Измените цвет найденного диапазона на цвет на предыдущем шаге.

Переключитесь на VBE и вставьте новый модуль. Убедитесь, что в проект добавлена ​​библиотека регулярных выражений VBScript, скопируйте и вставьте следующий код в этот новый модуль.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Запустите код, и вот результат.

Результат

Скачать файл Word

Чтобы загрузить файл Word: как использовать-регулярное выражение-в-microsoft-word.docm

RegEx в Excel?

Regex полностью отсутствует в Excel. Однако мы по-прежнему можем использовать регулярные выражения VBScript в Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Интересные статьи...