Kako koristiti RegEx u programu Microsoft Word - Excel savjeti

Lissa pita:

Postoji li način za promjenu broja (uvijek slučajnog broja) nakon riječi lisica? Primjer: lisica 23, medvjed 1, lisica 398, žaba 12, lisica 15. Želim promijeniti broj u istu boju riječi lisica.

Format možemo pronaći i zamijeniti u programu Microsoft Word. Ovo je izvrsna značajka za brzo pronalaženje formatiranog teksta, pa čak i zamjenu cijelog tekstualnog formata u dokumentu.

Na traci odaberite Napredno traženje.

Pronađi i zamijeni dijaloški okvir

Unesite tekst da biste ga pronašli, a zatim kliknite gumb Više za prikaz naprednih opcija i kliknite gumb Oblikovanje.

Napredne opcije pronalaženja

U postavkama odaberite opciju Font, a zatim možete postaviti boju teksta koju želite pronaći u dokumentu. Kliknite U redu da biste zatvorili dijaloški okvir Pronađi font.

Odaberite boju teksta u dijaloškom okviru Pronađi font.

Kliknite Pronađi dalje i vidjet ćete da će biti odabrano prvo pojavljivanje teksta u određenoj boji.

Pronađi Dalje da biste pronašli prvu pojavu.

Također možemo izvršiti složenija pretraživanja pomoću zamjenskih znakova. Međutim, Wordov izvorni modul pretraživanja ne dopušta nam da pretražimo kako je Lissa tražila.

Tu možemo RegEx pozvati u igru!

Biblioteka regularnih izraza VBSCript

VBA se ne isporučuje s podrškom za redovite izraze. Međutim, knjižnica Microsoft VBScript sadrži moćne mogućnosti regularnog izraza. Ova je knjižnica dio Internet Explorera 5.5 i novijih verzija, pa je dostupna na svim računalima sa sustavom Windows XP, Vista, 7, 8, 8.1 ili 10.

Korisnici Maca

Budući da Internet Explorer nije Mac aplikacija, ova knjižnica ne postoji na Macu. Stoga donji uzorci VBA ne rade na Macu.

Da biste koristili ovu knjižnicu u VBA, prebacite se na VBE, odaberite Project and Reference u izborniku VBE, a zatim se pomičite prema dolje da biste pronašli stavku "Microsoft VBScript Regular Expressions 5.5" i označite je da uključi u aplikaciju.

VBScript biblioteka regularnih izraza

Umetnite novi modul i kopirajte i zalijepite sljedeći kod u ovaj modul.

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

Ovaj postupak uzima uzorak teksta, pronalazi kodove proizvoda prema zadanom uzorku - koji započinje s "lisica", jednim razmakom i brojem, i ispisuje odgovarajuće kodove u prozoru Odmah (pritisnite Ctrl + G u VBE ako nije već vidljivo).

Podudarni kodovi proizvoda ispisani u prozoru Odmah.

d+ klasa znakova u uzorku definira jedan ili više numeričkih znakova, a uzorak je u osnovi prefiks "lisica" nakon kojeg slijedi razmak iza kojeg slijede brojevi.

Više informacija

Posjetite Jezik redovnog izraza - kratki priručnik za više informacija o izbjegavanju znakova, klasama znakova i sidrištima.

Kopirajte i zalijepite sljedeći kôd da biste vidjeli RegEx u akciji uklanjanja razmaka iz kodova proizvoda.

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

Ovaj postupak zamjenjuje uzorak tekstualnog sadržaja uklanjanjem razmaka iz kodova proizvoda koji se podudaraju s danim uzorkom i ispisuje rezultat teksta u prozoru Neposredno.

Zamijenjeni tekst ispisan u prozoru Odmah.

Imajte na umu da se uzorak malo razlikuje od prvog koda. Pojmovi u ovom uzorku priloženi su zagradama, a odgovarajući pojmovi koriste se u metodi Zamijeni kao 1 i 2 USD redom. Ovaj postupak jednostavno spaja dva pojma bez razmaka.

Povratak na pitanje

Vratimo se uzorku teksta koji smo koristili na početku ovog članka.

Uzorak teksta

Moramo pronaći "lisicu" nakon koje slijede numerički znakovi i promijeniti podudaranje upotrebom boje odjeljka "lisica" u odgovarajućem tekstu.

Iako se RegEx vrlo dobro podudara prema zadanom uzorku, ne može zamijeniti boju teksta u Word dokumentu. Tako ćemo kombinirati RegEx i Word VBA metode u sljedećem postupku.

Evo koraka:

  1. Pronađite podudarnosti s RegExom.
  2. Pretražite svaki podudarni tekst pomoću metode Pronađi riječ.
  3. Pronađite boju prve riječi u pronađenom rasponu.
  4. Promijenite boju pronađenog raspona s bojom u prethodnom koraku.

Prebacite se na VBE i umetnite novi modul. Provjerite je li knjižnica VBScript Regular Expressions dodana u projekt te kopirajte i zalijepite sljedeći kôd u ovaj novi modul.

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 

Pokrenite kod i evo rezultata.

Proizlaziti

Preuzmite datoteku Word

Da biste preuzeli Wordovu datoteku: how-to-use-regex-in-microsoft-word.docm

RegEx u Excelu?

Regex u potpunosti nedostaje u programu Excel. Međutim, i dalje možemo koristiti VBScript regularne izraze u programu 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

Zanimljivi članci...