Hur man använder RegEx i Microsoft Word - Excel Tips

Lissa frågar:

Finns det ett sätt att ändra ett nummer (alltid ett slumptal) efter ordet räv? Exempel: räv 23, björn 1, räv 398, groda 12, räv 15. Jag vill ändra siffran till samma färg som ordet räv.

Vi kan hitta och ersätta efter format i Microsoft Word. Detta är en utmärkt funktion för att snabbt hitta den formaterade texten och till och med ersätta hela textformatet i dokumentet.

Välj Avancerad sökning på menyfliksområdet.

Hitta och ersätt dialogrutan

Ange texten för att hitta och klicka sedan på Mer för att se avancerade alternativ och klicka på Format-knappen.

Avancerade sökalternativ

Välj teckensnittsalternativ i inställningarna, sedan kan du ställa in textfärgen som du vill hitta i dokumentet. Klicka på OK för att stänga dialogrutan Sök font.

Välj textfärg i dialogrutan Hitta teckensnitt.

Klicka på Sök nästa så ser du att den första förekomsten av texten som du söker i viss färg kommer att väljas.

Hitta Nästa för att hitta första tillfället.

Vi kan också göra mer komplicerade sökningar med jokertecken. Men Word: s inbyggda sökmodul låter oss inte göra en sökning hur Lissa frågade.

Det är där vi kan kalla RegEx till spelet!

VBSCript Regular Expressions Library

VBA levereras inte med något stöd för vanligt uttryck. Men Microsoft VBScript-bibliotek innehåller kraftfulla funktioner för reguljära uttryck. Detta bibliotek är en del av Internet Explorer 5.5 och senare, så det är tillgängligt på alla datorer som kör Windows XP, Vista, 7, 8, 8.1 eller 10.

Mac-användare

Eftersom Internet Explorer inte är ett Mac-program finns det här biblioteket inte i Mac. Därför fungerar inte VBA-prover nedan i Mac.

För att använda detta bibliotek i VBA, byt till VBE, välj Projekt och referenser i VBE-menyn, rulla sedan nedåt i listan för att hitta objektet "Microsoft VBScript Regular Expressions 5.5" och markera det för att inkludera i applikationen.

VBScript Regular Expressions Library

Sätt in en ny modul och kopiera och klistra in följande kod i den här modulen.

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

Denna procedur tar exempeltexten, hittar produktkoderna efter det givna mönstret - som börjar med "räv", ett mellanslag och ett nummer och skriver ut de matchade koder i Omedelbart fönster (tryck Ctrl + G i VBE om det inte är redan synlig).

Matchade produktkoder som skrivs ut i fönstret Omedelbart.

d+ teckenklass i mönstret definierar ett eller flera numeriska tecken, och mönstret är i princip "fox" -prefix följt av ett mellanslag följt av siffror.

Mer information

Besök Regular Expression Language - Quick Reference för mer information om karaktärsflykt, karaktärsklasser och ankare.

Kopiera och klistra in följande kod för att se RegEx i aktion för att ta bort mellanslag från 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

Den här proceduren ersätter exempeltextinnehållet genom att ta bort mellanslag från produktkoderna som matchas med det angivna mönstret och skriver ut resultattexten i fönstret Omedelbar.

Ersatt text som skrivs ut i fönstret Omedelbart.

Observera att mönstret är något annorlunda än den första koden. Termer i detta mönster är bifogade inom parentes, och motsvarande termer används i ersättningsmetoden som $ 1 och $ 2 i ordning. Denna procedur sammanfogar helt enkelt de två termerna utan mellanslag.

Tillbaka till frågan

Låt oss gå tillbaka till exempeltexten vi använde i början av den här artikeln.

Exempeltext

Vi måste hitta "räv" följt av numeriska tecken och ändra matchningen med hjälp av färgen på "räv" -avsnittet i den matchade texten.

Även om RegEx är mycket bra matchande med det angivna mönstret, kan det inte ersätta färgen på texten i Word-dokument. Så vi kommer att kombinera RegEx och Word VBA-metoder i följande procedur.

Här är stegen:

  1. Hitta matcherna med RegEx.
  2. Sök i varje matchad text med Word Find-metoden.
  3. Hitta färgen på det första ordet i det hittade intervallet.
  4. Ändra färgen på det hittade intervallet med färgen i föregående steg.

Byt till VBE och sätt in en ny modul. Se till att VBScript Regular Expressions-bibliotek läggs till i projektet och kopiera och klistra in följande kod i den här nya modulen.

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, och här är resultatet.

Resultat

Ladda ner Word-fil

För att ladda ner Word-filen: hur-använder-regex-i-microsoft-word.docm

RegEx i Excel?

Regex saknas helt i Excel. Vi kan dock fortfarande använda 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

Intressanta artiklar...