Sådan bruges RegEx i Microsoft Word - Excel-tip

Lissa spørger:

Er der en måde at ændre et tal på (altid et tilfældigt tal) efter ordet ræv? Eksempel: ræv 23, bjørn 1, ræv 398, frø 12, ræv 15. Jeg vil ændre tallet til samme farve som ordet ræv.

Vi kan finde og erstatte efter format i Microsoft Word. Dette er en fantastisk funktion til hurtigt at finde den formaterede tekst og endda erstatte hele tekstformatet i dokumentet.

Vælg Avanceret søgning på båndet.

Find og udskift dialog

Indtast den tekst, der skal findes, og klik derefter på Mere-knappen for at se avancerede indstillinger, og klik på knappen Format.

Avancerede søgemuligheder

Vælg Font-indstilling i indstillingerne, så kan du indstille den tekstfarve, du gerne vil finde i dokumentet. Klik på OK for at lukke dialogboksvinduet Find font.

Vælg tekstfarve i dialogboksen Find skrifttype.

Klik på Find næste, så ser du den første forekomst af den tekst, der søges i en bestemt farve, vælges.

Find Næste for at finde første forekomst.

Vi kan også foretage mere komplicerede søgninger ved hjælp af jokertegn. Imidlertid lader Words oprindelige søgemodul os ikke søge, hvordan Lissa spurgte.

Det er her, vi kan kalde RegEx ind i spillet!

VBSCript Regular Expressions Library

VBA leveres ikke med nogen understøttelse af regulært udtryk. Imidlertid indeholder Microsoft VBScript-biblioteket effektive kapaciteter med regulært udtryk. Dette bibliotek er en del af Internet Explorer 5.5 og nyere, så det er tilgængeligt på alle computere, der kører Windows XP, Vista, 7, 8, 8.1 eller 10.

Mac-brugere

Da Internet Explorer ikke er et Mac-program, findes dette bibliotek ikke i Mac. Derfor fungerer VBA-eksempler nedenfor ikke på Mac.

For at bruge dette bibliotek i VBA skal du skifte til VBE, vælge Projekt og referencer i VBE-menuen og derefter rulle ned på listen for at finde emnet "Microsoft VBScript Regular Expressions 5.5" og markere det for at inkludere det i applikationen.

VBScript Regular Expressions Library

Indsæt et nyt modul, og kopier og indsæt følgende kode i dette 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

Denne procedure tager eksemplet på teksten, finder produktkoderne efter det givne mønster - som starter med "ræv", enkelt mellemrum og et tal og udskriver de matchede koder i det øjeblikkelige vindue (tryk Ctrl + G i VBE, hvis det ikke er allerede synlig).

Matchede produktkoder udskrevet i vinduet Umiddelbart.

d+ tegnklasse i mønsteret definerer et eller flere numeriske tegn, og mønsteret er grundlæggende "ræv" -præfiks efterfulgt af et mellemrum efterfulgt af tal.

Mere info

Besøg Regular Expression Language - Hurtig reference for at få flere oplysninger om karakterudslip, karakterklasser og ankre.

Kopier og indsæt følgende kode for at se RegEx i aktion for at fjerne mellemrum fra produktkoder.

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

Denne procedure erstatter eksempeltekstindholdet ved at fjerne mellemrumene fra de produktkoder, der svarer til det givne mønster, og udskriver resultatteksten i vinduet Umiddelbar.

Erstattet tekst udskrevet i vinduet Umiddelbart.

Bemærk, at mønsteret er lidt anderledes end den første kode. Vilkår i dette mønster er lukket med parenteser, og tilsvarende udtryk bruges i Erstat-metoden som $ 1 og $ 2 i rækkefølge. Denne procedure forbinder simpelthen de to termer uden mellemrum.

Tilbage til spørgsmålet

Lad os gå tilbage til den eksempeltekst, vi brugte i begyndelsen af ​​denne artikel.

Prøvetekst

Vi er nødt til at finde "ræv" efterfulgt af numeriske tegn og ændre match ved hjælp af farven på "ræv" -afsnittet i den matchede tekst.

Selvom RegEx passer meget godt til det givne mønster, kan det ikke erstatte farven på tekst i Word-dokument. Så vi kombinerer RegEx og Word VBA-metoder i den følgende procedure.

Her er trinene:

  1. Find kampene med RegEx.
  2. Søg i hver matchet tekst ved hjælp af Word Find-metoden.
  3. Find farven på det første ord i det fundne interval.
  4. Skift farven på det fundne område med farven i det foregående trin.

Skift til VBE, og indsæt et nyt modul. Sørg for, at VBScript Regular Expressions-bibliotek føjes til projektet, og kopier og indsæt følgende kode i dette nye 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 

Kør koden, og her er resultatet.

Resultat

Download Word-fil

Sådan downloader du Word-filen: hvordan-bruger-regex-i-microsoft-word.docm

RegEx i Excel?

Regex mangler helt i Excel. Vi kan dog stadig bruge VBScript Regular Expressions i 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

Interessante artikler...