A RegEx használata a Microsoft Wordben - Excel tippek

Lissa azt kérdezi:

Van-e mód a szám (mindig véletlenszerű szám) megváltoztatására a róka szó után? Példa: róka 23, 1. medve, róka 398, béka 12, róka 15. A számot a róka szó azonos színére szeretném változtatni.

Megtalálhatjuk és helyettesíthetjük formátum szerint a Microsoft Word-ben. Ez egy nagyszerű lehetőség a formázott szöveg gyors megtalálásához, sőt a teljes szöveges formátum cseréjéhez a dokumentumban.

Válassza a Speciális keresés lehetőséget a szalagon.

Keresse meg és cserélje párbeszédpanelt

Írja be a keresendő szöveget, majd kattintson a Tovább gombra a speciális opciók megtekintéséhez, majd kattintson a Formátum gombra.

Speciális keresési opciók

Válassza a Betűtípus lehetőséget a beállításokban, majd beállíthatja a szöveg színét, amelyet meg szeretne találni a dokumentumban. Kattintson az OK gombra a Betűtípus keresése párbeszédablak bezárásához.

Válassza ki a szöveg színét a Betűtípus keresése párbeszédpanelen.

Kattintson a Következő keresése gombra, és meglátja, hogy a bizonyos színben keresett szöveg első előfordulása ki lesz-e választva.

Keresse meg a Következő elemet az első előfordulás megtalálásához.

Bonyolultabb kereséseket is végezhetünk helyettesítő karakterek használatával. A Word natív keresési modulja azonban nem engedi, hogy Lissa kérdezésével keressünk.

Ott hívhatjuk be a RegEx-et a játékba!

VBSCript Regular Expressions Library

A VBA nem szállít semmilyen reguláris kifejezés támogatást. A Microsoft VBScript könyvtár azonban erőteljes szabályos kifejezés képességeket tartalmaz. Ez a könyvtár az Internet Explorer 5.5 és újabb verzióinak része, így minden Windows XP, Vista, 7, 8, 8.1 vagy 10 rendszert futtató számítógépen elérhető.

Mac felhasználók

Mivel az Internet Explorer nem Mac alkalmazás, ez a könyvtár nem létezik a Mac rendszerben. Ezért az alábbi VBA-minták nem működnek Mac-en.

Ha ezt a könyvtárat szeretné használni a VBA-ban, váltson VBE-re, válassza a Projekt és hivatkozások lehetőséget a VBE menüben, majd görgessen lefelé a listán, hogy megtalálja a "Microsoft VBScript Regular Expressions 5.5" elemet, és jelölje be, hogy felvegye az alkalmazásba.

VBScript Regular Expressions Library

Helyezzen be egy új modult, és másolja be a következő kódot ebbe a modulba.

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

Ez az eljárás felveszi a mintaszöveget, megkeresi a termékkódokat a megadott minta alapján - amely "rókával", egyetlen szóközzel és számmal kezdődik, és kinyomtatja az egyező kódokat az Azonnali ablakban (nyomja meg a Ctrl + G billentyűt a VBE-ben, ha nem már látható).

Azonnali ablakban kinyomtatott egyező termékkódok.

d+ A minta karakterosztálya egy vagy több numerikus karaktert határoz meg, és a minta alapvetően a "róka" előtag, amelyet egy szóköz követ, majd a számok.

Több információ

Látogasson el a Reguláris kifejezés nyelve - Gyors áttekintés című cikkbe, ahol további információkat talál a karakterek meneküléséről, a karakterosztályokról és a horgonyokról.

Másolja és illessze be a következő kódot a RegEx működéséhez, hogy eltávolítsa a szóközöket a termékkódokból.

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

Ez az eljárás helyettesíti a mintaszöveg tartalmát azáltal, hogy eltávolítja a szóközöket az adott mintához illesztett termékkódokból, és az eredmény szöveget kinyomtatja az Azonnali ablakba.

Az Azonnali ablakban kinyomtatott szöveg.

Felhívjuk figyelmét, hogy a minta kissé eltér az első kódtól. A mintában szereplő kifejezéseket zárójelek zárják, és a megfelelő kifejezéseket a Csere metódusban $ 1 és $ 2 sorrendben használják. Ez az eljárás egyszerűen szóköz nélkül egyesíti a két kifejezést.

Vissza a kérdéshez

Térjünk vissza a cikk elején használt mintaszöveghez.

Minta szöveg

Meg kell találnunk a "rókát", amelyet numerikus karakterek követnek, és meg kell változtatnunk az egyezést az egyeztetett szöveg "rókája" szakaszának színével.

Bár a RegEx nagyon jól illeszkedik az adott mintához, nem tudja helyettesíteni a Word dokumentum szövegének színét. Tehát a következő eljárásban egyesítjük a RegEx és a Word VBA módszereket.

Itt vannak a lépések:

  1. Keresse meg a mérkőzéseket a RegEx segítségével.
  2. Keressen minden egyező szöveget a Word Find módszer használatával.
  3. Keresse meg az első szó színét a megtalált tartományban.
  4. Módosítsa a megtalált tartomány színét az előző lépés színével.

Váltson VBE-re, és helyezzen be egy új modult. Ellenőrizze, hogy a VBScript Regular Expressions könyvtár hozzá van-e adva a projekthez, és másolja és illessze be a következő kódot ebbe az új modulba.

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 

Futtassa a kódot, és itt van az eredmény.

Eredmény

Töltse le a Word fájlt

A Word fájl letöltése: how-to-use-regex-in-microsoft-word.docm

RegEx az Excelben?

A Regex teljesen hiányzik az Excelből. Az Excel VBA-ban azonban továbbra is használhatjuk a VBScript reguláris kifejezéseket.

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

érdekes cikkek...