Как да използвам RegEx в Microsoft Word - Съвети на Excel

Лиса пита:

Има ли начин да промените число (винаги произволно число) след думата лисица? Пример: лисица 23, мечка 1, лисица 398, жаба 12, лисица 15. Искам да променя номера на същия цвят на думата лисица.

Можем да намерим и заменим по формат в Microsoft Word. Това е чудесна функция за бързо намиране на форматирания текст и дори за замяна на целия текстов формат в документа.

Изберете Разширено търсене на лентата.

Намерете и заменете диалоговия прозорец

Въведете текста, за да го намерите, след това щракнете върху бутона Още, за да видите разширени опции, и щракнете върху бутона Форматиране.

Разширени опции за търсене

Изберете опция Шрифт в настройките, след което можете да настроите цвета на текста, който искате да намерите в документа. Щракнете върху OK, за да затворите диалоговия прозорец Find Font.

Изберете цвета на текста в диалоговия прозорец Търсене на шрифт.

Щракнете върху Намиране нататък и ще видите първото появяване на търсения текст в определен цвят ще бъде избрано.

Намерете Напред, за да намерите първа поява.

Можем да правим и по-сложни търсения, като използваме заместващи символи. Въпреки това, родният модул за търсене на 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, изберете Project and References в менюто 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+ класът символи в шаблона дефинира един или повече цифрови знаци и шаблонът е основно префикс "лисица", последван от интервал, последван от числа.

Повече информация

Посетете Език на регулярния израз - Кратък справочник за повече информация относно избягвания на символи, класове знаци и котви.

Копирайте и поставете следния код, за да видите 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

This procedure replaces the sample text content by removing the spaces from the product codes matched with the given pattern, and prints the result text in the Immediate window.

Replaced text printed in the Immediate window.

Please note that pattern is slightly different than the first code. Terms in this pattern are enclosed with parentheses, and corresponding terms are used in the Replace method as $1 and $2 in order. This procedure simply joins the two terms without spaces.

Back to the Question

Let's go back to the sample text we used at the beginning of this article.

Sample Text

We need to find "fox" followed by numeric characters, and change the match by using the color of the "fox" section in the matched text.

Although RegEx is very good matching by the given pattern, it cannot replace the color of text in Word document. So we will combine RegEx and Word VBA methods in the following procedure.

Here are the steps:

  1. Find the matches with RegEx.
  2. Search each matched text by using Word Find method.
  3. Find the color of the first word in the found range.
  4. Change the color of the found range with the color in the previous step.

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

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 

Run the code, and here is the result.

Result

Download Word File

To download the Word file: how-to-use-regex-in-microsoft-word.docm

RegEx in Excel?

Regex is completely missing from Excel. However, we can still use VBScript Regular Expressions in 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

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