RegExi kasutamine Microsoft Wordis - Exceli näpunäited

Lissa küsib:

Kas on võimalik numbrit (alati juhuslikku arvu) pärast sõna rebast muuta? Näide: rebane 23, karu 1, rebane 398, konn 12, rebane 15. Soovin muuta numbri samaks värvi rebane.

Microsoft Wordist leiame ja vormingu järgi asendame. See on suurepärane funktsioon vormindatud teksti kiireks leidmiseks ja isegi dokumendis kogu tekstivormingu asendamiseks.

Valige lindil Täpsem leid.

Dialoogi leidmine ja asendamine

Sisestage leidmiseks tekst, seejärel klõpsake täpsemate valikute nägemiseks nuppu Veel ja klõpsake nuppu Vorminda.

Täpsemad otsimisvalikud

Valige seadetes Font valik, seejärel saate seadistada tekstivärvi, mille soovite dokumendist leida. Dialoogiakna Otsi fondi sulgemiseks klõpsake nuppu OK.

Valige teksti värv dialoogiboksis Fondi otsimine.

Klõpsake nuppu Leia järgmine ja näete, et valitud on esimene värv, mida otsitakse teatud värviga.

Esimese esinemise leidmiseks leidke järgmine.

Samuti saame metamärke kasutades teha keerukamaid otsinguid. Kuid Wordi omakeelne otsingumoodul ei lase meil otsida, kuidas Lissa küsis.

Seal saame RegExi mängu kutsuda!

VBSCripti regulaaravaldiste kogu

VBA ei paku regulaaravaldise tuge. Kuid Microsofti VBScript'i teek sisaldab võimsaid regulaaravaldise võimalusi. See teek on osa Internet Explorer 5.5 ja uuemast versioonist, seega on see saadaval kõikides arvutites, kus töötab Windows XP, Vista, 7, 8, 8.1 või 10.

Maci kasutajad

Kuna Internet Explorer pole Maci rakendus, pole seda teeki Macis olemas. Seetõttu ei tööta allpool olevad VBA näidised Macis.

Selle teegi kasutamiseks VBA-s lülituge VBE-le, valige menüüst VBE Projekt ja viited, seejärel kerige loendis allpool üksuse "Microsoft VBScript Regular Expressions 5.5" leidmiseks ja märkige see rakendusse lisamiseks.

VBScript regulaaravaldiste kogu

Sisestage uus moodul ning kopeerige ja kleepige järgmine moodul sellesse moodulisse.

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

See protseduur võtab näidisteksti, leiab tootekoodid antud mustri järgi - mis algab tähega "rebane", ühe tühiku ja numbriga ning prindib sobivad koodid aknasse Kohe (vajutage VBE-s klahve Ctrl + G, kui see pole juba nähtav).

Aknas Kohe trükitud sobitatud tootekoodid.

d+ mustris olev märgiklass määratleb ühe või mitu numbrimärki ja muster on põhimõtteliselt "rebase" eesliide, millele järgneb tühik, millele järgnevad numbrid.

Rohkem infot

Lisateavet märkide põgenemiste, tähemärkide klasside ja ankrute kohta leiate aadressilt Regulaaravaldise keel - kiirjuhend.

Kopeerige ja kleepige järgmine kood, et näha RegExi toimimist tühikute eemaldamiseks tootekoodidest.

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

See protseduur asendab näidisteksti sisu, eemaldades antud mustriga sobitatud tootekoodidest tühikud ja prindib tulemuse teksti kohe aknasse.

Vahetatud aknas trükitud tekst.

Pange tähele, et muster erineb veidi esimesest koodist. Selle mustri mõisted on suludesse lisatud ja asendusmeetodis kasutatakse vastavaid termineid järjestuses $ 1 ja $ 2. See protseduur ühendab need kaks mõistet lihtsalt tühikuteta.

Tagasi küsimuse juurde

Naaseme tagasi näidisteksti juurde, mida kasutasime selle artikli alguses.

Näidistekst

Peame leidma "rebane", millele järgnevad numbrilised tähemärgid, ja muutma vastet, kasutades sobitatud tekstis jaotise "rebane" värvi.

Kuigi RegEx sobib antud mustriga väga hästi, ei saa see Wordi dokumendis teksti värvi asendada. Nii ühendame RegExi ja Wordi VBA meetodid järgmises protseduuris.

Siin on sammud:

  1. RegExiga leiate vasted.
  2. Otsige iga sobitatud teksti Wordi meetodi abil.
  3. Leidke leitud sõna esimese sõna värv.
  4. Leitud vahemiku värvi muutmine eelmise sammu värviga.

Lülitage VBE-le ja sisestage uus moodul. Veenduge, et projektile oleks lisatud VBScript Regular Expressions teek ning kopeerige ja kleepige järgmine kood sellesse uude moodulisse.

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äivitage kood ja siin on tulemus.

Tulemus

Laadige alla Wordi fail

Wordi faili allalaadimiseks toimige järgmiselt

RegEx Excelis?

Regex puudub Excelis täielikult. Kuid siiski saame Exceli VBA-s kasutada VBScript Regular Expressions.

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

Huvitavad Artiklid...