Kako uporabljati RegEx v programu Microsoft Word - Excel Nasveti

Lissa vpraša:

Ali lahko po besedi lisica spremenite številko (vedno naključno)? Primer: lisica 23, medved 1, lisica 398, žaba 12, lisica 15. Številko želim spremeniti v enako barvo besede lisica.

V programu Microsoft Word lahko najdemo in nadomestimo po obliki. To je odlična funkcija za hitro iskanje formatiranega besedila in celo zamenjavo celotne besedilne oblike v dokumentu.

Na traku izberite Napredno iskanje.

Poiščite in zamenjajte pogovorno okno

Vnesite besedilo, ki ga želite najti, nato kliknite gumb Več, da si ogledate napredne možnosti, in kliknite gumb Oblika.

Napredne možnosti iskanja

V nastavitvah izberite možnost Pisava, nato lahko nastavite barvo besedila, ki jo želite najti v dokumentu. Kliknite V redu, da zaprete pogovorno okno Najdi pisavo.

V pogovornem oknu Najdi pisavo izberite barvo besedila.

Kliknite Najdi naprej in videli boste, da je izbrano prvo pojavljanje besedila v določeni barvi.

Poiščite Next in poiščite prvo pojavitev.

Zapletenejša iskanja lahko izvedemo tudi z uporabo nadomestnih znakov. Vendar nam Wordov modul za izvorno iskanje ne dovoli, da bi iskali, kot je vprašala Lissa.

Tu lahko v igro pokličemo RegEx!

Knjižnica regularnih izrazov VBSCript

VBA ni dobavljen s podporo za regularne izraze. Vendar knjižnica Microsoft VBScript vsebuje zmogljive zmožnosti regularnega izražanja. Ta knjižnica je del Internet Explorerja 5.5 in novejših različic, zato je na voljo v vseh računalnikih s sistemom Windows XP, Vista, 7, 8, 8.1 ali 10.

Uporabniki Maca

Ker Internet Explorer ni aplikacija za Mac, ta knjižnica v Macu ne obstaja. Zato spodnji vzorci VBA v Macu ne delujejo.

Če želite to knjižnico uporabljati v VBA, preklopite na VBE, v meniju VBE izberite Project and Reference, nato se pomaknite po seznamu in poiščite element »Microsoft VBScript Regular Expressions 5.5« in ga obkljukajte, da bo vključen v aplikacijo.

Knjižnica regularnih izrazov VBScript

Vstavite nov modul in v ta modul kopirajte in prilepite naslednjo kodo.

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

Ta postopek vzame vzorčno besedilo, poišče kode izdelkov po danem vzorcu - ki se začne z "lisico", enim presledkom in številko ter v oknu Takoj natisne ujemajoče se kode (pritisnite Ctrl + G, če ni že viden).

Ujemajoče se kode izdelkov, natisnjene v oknu Takoj.

d+ razred znakov v vzorcu določa enega ali več številskih znakov, vzorec pa je v bistvu predpona "lisica", ki ji sledi presledek, ki mu sledijo številke.

Več informacij

Za več informacij o uhajanju znakov, razredih znakov in sidriščih obiščite Jezik običajnega izraza - Kratki referenčni opis

Kopirajte in prilepite naslednjo kodo, če želite videti RegEx v akciji za odstranjevanje presledkov iz kod izdelkov.

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

Ta postopek nadomesti vzorčno vsebino besedila z odstranjevanjem presledkov iz kod izdelkov, ki se ujemajo z danim vzorcem, in izpiše besedilo rezultata v oknu Takoj.

Zamenjano besedilo, natisnjeno v oknu Takoj.

Upoštevajte, da se vzorec nekoliko razlikuje od prve kode. Izrazi v tem vzorcu so priloženi v oklepajih, ustrezni izrazi pa se uporabljajo v metodi Zamenjaj kot 1 USD in 2 USD po vrsti. Ta postopek preprosto združi dva izraza brez presledkov.

Nazaj na vprašanje

Vrnimo se k vzorčnemu besedilu, ki smo ga uporabili na začetku tega članka.

Vzorec besedila

Poiskati moramo "lisico", ki ji sledijo številski znaki, in spremeniti ujemanje z uporabo barve oddelka "lisica" v ustreznem besedilu.

Čeprav se RegEx zelo dobro ujema z danim vzorcem, ne more nadomestiti barve besedila v dokumentu Word. V naslednjem postopku bomo združili metode RegEx in Word VBA.

Tu so koraki:

  1. Poiščite ujemanja z RegEx.
  2. Iščite po besedilu, ki se ujema, z uporabo metode Word Find.
  3. Poiščite barvo prve besede v najdenem obsegu.
  4. Spremenite barvo najdenega obsega z barvo v prejšnjem koraku.

Preklopite na VBE in vstavite nov modul. Prepričajte se, da je v projekt dodana knjižnica VBScript Regular Expressions, in v ta novi modul kopirajte in prilepite naslednjo kodo.

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 

Zaženite kodo in tukaj je rezultat.

Rezultat

Prenesite datoteko Word

Če želite prenesti datoteko Word: kako uporabiti-regex-v-microsoft-word.docm

RegEx v Excelu?

Regex v Excelu popolnoma manjka. Še vedno pa lahko uporabljamo regularne izraze VBScript v Excelu 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

Zanimive Članki...