Ako používať program RegEx v programe Microsoft Word - Excel Tipy

Lissa sa pýta:

Existuje spôsob, ako zmeniť číslo (vždy náhodné číslo) za slovom líška? Príklad: líška 23, medveď 1, líška 398, žaba 12, líška 15. Chcem zmeniť číslo na rovnakú farbu slova líška.

V aplikácii Microsoft Word môžeme nájsť a nahradiť formátom. Je to skvelá funkcia na rýchle vyhľadanie formátovaného textu a dokonca aj na nahradenie celého formátu textu v dokumente.

Na páse s nástrojmi vyberte možnosť Rozšírené vyhľadávanie.

Dialóg Nájsť a nahradiť

Zadajte text, ktorý chcete vyhľadať, potom kliknite na tlačidlo Viac, aby ste zobrazili pokročilé možnosti, a kliknite na tlačidlo Formátovať.

Pokročilé možnosti vyhľadávania

V nastaveniach vyberte možnosť Písmo a potom môžete nastaviť farbu textu, ktorú chcete nájsť v dokumente. Kliknutím na tlačidlo OK zatvorte dialógové okno Nájsť písmo.

V dialógovom okne Nájsť písmo vyberte farbu textu.

Kliknite na tlačidlo Nájsť ďalšie a uvidíte, že bude vybraný prvý výskyt vyhľadávaného textu v určitej farbe.

Vyhľadať ďalšie na vyhľadanie prvej udalosti.

Komplikovanejšie vyhľadávanie môžeme vykonať aj pomocou zástupných znakov. Avšak natívny vyhľadávací modul Wordu nám nedovolí hľadať, ako sa Lissa spýtala.

To je miesto, kde môžeme do hry zavolať RegEx!

Knižnica regulárnych výrazov VBSCript

VBA sa nedodáva so žiadnou podporou regulárnych výrazov. Knižnica Microsoft VBScript však obsahuje výkonné funkcie regulárneho výrazu. Táto knižnica je súčasťou prehliadača Internet Explorer 5.5 a novších verzií, takže je k dispozícii na všetkých počítačoch so systémom Windows XP, Vista, 7, 8, 8.1 alebo 10.

Používatelia počítačov Mac

Pretože Internet Explorer nie je aplikácia pre Mac, táto knižnica v Mac neexistuje. Preto nižšie uvedené vzorky VBA v systéme Mac nefungujú.

Ak chcete túto knižnicu používať vo VBA, prepnite na VBE, v ponuke VBE vyberte Project and References, potom posuňte sa nadol v zozname a nájdite položku „Microsoft VBScript Regular Expressions 5.5“ a začiarknite ju, aby sa zahrnula do aplikácie.

Knižnica regulárnych výrazov VBScript

Vložte nový modul a do tohto modulu skopírujte a vložte nasledujúci kód.

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

Táto procedúra vezme ukážkový text, vyhľadá kódy produktu podľa daného vzoru - ktorý začína na „líška“, jedna medzera a číslo, a vytlačí zhodné kódy v okne Okamžité (pokiaľ nie je stlačené Ctrl + G vo VBE) už viditeľné).

Kódy zhodných produktov vytlačené v okne Okamžité.

d+ trieda znakov vo vzore definuje jeden alebo viac číselných znakov a vzor je v podstate predpona „líška“, za ktorou nasleduje medzera a za ňou čísla.

Viac informácií

Navštívte Jazyk regulárnych výrazov - Stručný prehľad, kde nájdete ďalšie informácie o únikoch znakov, triedach znakov a kotvách.

Skopírujte a vložte nasledujúci kód, aby ste videli RegEx v akcii, aby ste odstránili medzery z kódov produktu.

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

Tento postup nahradí ukážkový textový obsah odstránením medzier z kódov výrobkov zhodných s daným vzorom a výsledný text sa vytlačí v okne Okamžité.

Nahradený text vytlačený v okne Okamžité.

Upozorňujeme, že vzor sa mierne líši od prvého kódu. Výrazy v tomto vzore sú uzavreté v zátvorkách a zodpovedajúce výrazy sa v metóde Replace používajú v poradí $ 1 a $ 2. Tento postup jednoducho spojí dva výrazy bez medzier.

Späť k otázke

Vráťme sa k ukážke textu, ktorú sme použili na začiatku tohto článku.

Ukážkový text

Musíme nájsť „líšku“, za ktorou nasledujú číselné znaky, a zmeniť zhodu pomocou farby časti „líška“ v zhodnom texte.

Aj keď RegEx veľmi dobre zodpovedá danému vzoru, nemôže nahradiť farbu textu v dokumente Word. V nasledujúcom postupe teda skombinujeme metódy RegEx a Word VBA.

Tu sú kroky:

  1. Nájdite zhody s RegEx.
  2. Vyhľadajte každý zhodný text pomocou metódy Word Find.
  3. Nájdite farbu prvého slova v nájdenom rozsahu.
  4. Zmeňte farbu nájdeného rozsahu pomocou farby v predchádzajúcom kroku.

Prepnite na VBE a vložte nový modul. Uistite sa, že je do projektu pridaná knižnica regulárnych výrazov VBScript a skopírujte a vložte nasledujúci kód do tohto nového modulu.

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 

Spustite kód a tu je výsledok.

Výsledok

Stiahnite si súbor Word

Stiahnutie súboru programu Word: how-to-use-regex-in-microsoft-word.docm

RegEx v programe Excel?

Regex v programe Excel úplne chýba. Stále však môžeme používať regulárne výrazy VBScript v programe 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

Zaujímavé články...