Excel RegEx voorbeelde: die gebruik van gereelde uitdrukkings in formules

  • Deel Dit
Michael Brown

Kan nooit verstaan ​​hoekom gereelde uitdrukkings nie in Excel-formules ondersteun word nie? Nou is hulle :) Met ons pasgemaakte funksies kan jy maklik stringe vind, vervang, onttrek en verwyder wat by 'n spesifieke patroon pas.

Op die eerste oogopslag het Excel alles wat jy ooit vir teksstring kan benodig. manipulasies. Hmm ... wat van gewone uitdrukkings? Oeps, daar is geen ingeboude Regex-funksies in Excel nie. Maar niemand sê ons kan nie ons eie skep nie :)

    Wat is gereelde uitdrukking?

    'n Gereelde uitdrukking (aka regex of regexp ) is 'n spesiaal geënkodeerde reeks karakters wat 'n soekpatroon definieer. Deur daardie patroon te gebruik, kan jy 'n ooreenstemmende karakterkombinasie in 'n string vind of data-invoer valideer. As jy vertroud is met 'n jokertekennotasie, kan jy aan regekse dink as 'n gevorderde weergawe van jokertekens.

    Gereelde uitdrukkings het hul eie sintaksis wat bestaan ​​uit spesiale karakters, operateurs en konstrukte. Byvoorbeeld, [0-5] pas by enige enkele syfer van 0 tot 5.

    Gereelde uitdrukkings word in baie programmeertale gebruik, insluitend JavaScript en VBA. Laasgenoemde het 'n spesiale RegExp-objek, wat ons sal gebruik om ons persoonlike funksies te skep.

    Ondersteun Excel regex?

    Ongelukkig is daar geen ingeboude Regex-funksies in Excel nie. Om gereelde uitdrukkings in jou formules te kan gebruik, sal jy jou eie gebruikergedefinieerde funksie (VBA) moet skepargumente:

    =IF(RegExpMatch(A5, $A$2), "Yes", "No")

    Vir meer formulevoorbeelde, sien asseblief:

    • Hoe om stringe te pas deur gewone uitdrukkings te gebruik
    • Excel Data Validation met regexes

    Excel Regex Extract-funksie

    Die RegExpExtract -funksie soek na substringe wat by 'n gewone uitdrukking pas en onttrek alle passings of spesifieke passing.

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Waar:

    • Teks (vereis) - die teksstring om te soek in.
    • Patroon (vereis) - die gereelde uitdrukking om te pas.
    • Instance_num (opsioneel) - 'n reeksnommer wat aandui watter instansie uittreksel. Indien weggelaat, gee alle gevind passings terug (verstek).
    • Password_case (opsioneel) - definieer of om te pas (WAAR of weggelaat) of ignoreer (ONWAAR) tekskas.

    Jy kan die kode van die funksie hier kry.

    Voorbeeld: hoe om stringe te onttrek deur gebruik te maak van gereelde uitdrukkings

    Om ons voorbeeld 'n bietjie verder te neem, kom ons onttrek faktuurnommers. Hiervoor sal ons 'n baie eenvoudige regeks gebruik wat by enige 7-syfergetal pas:

    Patroon : \b\d{7}\b

    Put die patroon in A2 en jy sal die werk gedoen kry met hierdie kompakte en elegante formule:

    =RegExpExtract(A5, $A$2)

    As 'n patroon ooreenstem, onttrek die formule 'n faktuurnommer, indien geen passing gevind word nie - niks word teruggestuur nie.

    Vir meer voorbeelde, sien asseblief: Hoe om stringe in Excel te onttrekgebruik regex.

    Excel Regex Replace-funksie

    Die RegExpReplace -funksie vervang die waardes wat by 'n regex pas met die teks wat jy spesifiseer.

    RegExpReplace(teks, patroon, vervanging , [instance_num], [match_case])

    Waar:

    • Teks (vereis) - die teksstring om in te soek.
    • Patroon (vereis) - die gereelde uitdrukking om te pas.
    • Vervanging (vereis) - die teks om die ooreenstemmende substringe mee te vervang.
    • Instance_num (opsioneel) - die instansie wat vervang moet word. Die verstek is "alle passings".
    • Password_case (opsioneel) - beheer of dit ooreenstem (WAAR of weggelaat) of ignoreer (ONWAAR) tekskas.

    Die kode van die funksie is hier beskikbaar.

    Voorbeeld: hoe om stringe te vervang of te verwyder deur gebruik te maak van regexes

    Sommige van ons rekords bevat kredietkaartnommers. Hierdie inligting is vertroulik, en jy sal dit dalk met iets wil vervang of heeltemal uitvee. Albei take kan met behulp van die RegExpReplace -funksie uitgevoer word. Hoe? In 'n tweede scenario sal ons met 'n leë string vervang.

    In ons voorbeeldtabel het alle kaartnommers 16 syfers, wat in 4 groepe geskryf is, geskei met spasies. Om hulle te vind, herhaal ons die patroon deur hierdie gereelde uitdrukking te gebruik:

    Patroon : \b\d{4} \d{4} \d{4} \d{4}\ b

    Vir vervanging word die volgende string gebruik:

    Vervanging : XXXX XXXX XXXXXXXX

    En hier is 'n volledige formule om kredietkaartnommers te vervang met onsensitiewe inligting:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")

    Met die regeks en vervangingsteks in aparte selle ( A2 en B2), werk die formule ewe goed:

    In Excel is "verwydering" 'n spesifieke geval van "vervang". Om verwyder kredietkaartnommers, gebruik net 'n leë string ("") vir die vervanging argument:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")

    Wenk. Om 'n rig van leë lyne in die resultate te kry, kan jy 'n ander RegExpReplace-funksie gebruik soos in hierdie voorbeeld getoon: Hoe om leë lyne te verwyder deur gebruik te maak van regex.

    Vir meer inligting, sien asseblief:

    • Hoe om stringe in Excel te vervang met regex
    • Hoe om stringe met regex te verwyder
    • Hoe om witspasie af te stroop met behulp van regexes

    Regex-nutsgoed om te pas, onttrek , vervang en verwyder substringe

    Die gebruikers van ons Ultimate Suite kan al die krag van gereelde uitdrukkings kry sonder om 'n enkele reël kode in hul werkboeke in te voeg. Alle nodige kode word deur ons ontwikkelaars geskryf en glad in jou Excel geïntegreer tydens installasie.

    Anders as die VBA-funksies wat hierbo bespreek is, is Ultimate Suite se funksies .NET gebaseer, wat twee hoofvoordele bied:

    1. Jy kan gereelde uitdrukkings in normale .xlsx-werkboeke gebruik sonder om enige VBA-kode by te voeg en dit as makro-geaktiveerde lêers te hoef te stoor.
    2. .NET Regex-enjin ondersteun klassieke klassieke funksies.gereelde uitdrukkings, waarmee jy meer gesofistikeerde patrone kan bou.

    Hoe om Regex in Excel te gebruik

    Met die Ultimate Suite geïnstalleer, is die gebruik van gereelde uitdrukkings in Excel so eenvoudig soos hierdie twee stappe :

    1. Op die Ablebits Data -oortjie, in die Teks -groep, klik Regex Tools .

    2. Op die Regex Tools -paneel, doen die volgende:
      • Kies die brondata.
      • Voer jou regex-patroon in.
      • Kies die gewenste opsie: Pas by , Uittrek , Verwyder of Vervang .
      • Om die resultaat te kry as formule en nie waarde nie, kies die Voeg as 'n formule in -merkblokkie.
      • Tik die aksieknoppie.

      Om byvoorbeeld kredietkaartnommers uit selle te verwyder A2:A6, ons konfigureer hierdie instellings:

    In 'n trice sal 'n AblebitsRegex-funksie in 'n nuwe kolom regs van jou oorspronklike ingevoeg word data. In ons geval is die formule:

    =AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")

    Sodra die formule daar is, kan jy dit wysig, kopieer of skuif soos enige inheemse formule.

    Hoe om 'n Regex-formule direk in 'n sel in te voeg

    Die AblebitsRegex-funksies kan ook direk in 'n sel ingevoeg word sonder om die byvoeging se koppelvlak te gebruik. Dit is hoe:

    1. Klik die fx -knoppie op die formulebalk of Voeg funksie in op die Formules -oortjie.
    2. In die Voeg funksie in dialoogkassie, kies die AblebitsUDFs kategorie, kies die funksie van belang, en klik OK.

    3. Definieer die funksie se argumente soos jy gewoonlik doen en klik OK. Klaar!

    Vir meer inligting, sien asseblief Regex Tools for Excel.

    Dis hoe om gereelde uitdrukkings te gebruik om teks in Excel-selle te pas, onttrek, vervang en te verwyder. Ek bedank jou vir die lees en sien uit daarna om jou volgende week op ons blog te sien!

    Beskikbare aflaaie

    Excel Regex - formulevoorbeelde (.xlsm-lêer)

    Ultimate Suite - proefweergawe (.exe-lêer)

    of .NET gebaseer) of installeer derdeparty-nutsmiddels wat regexes ondersteun.

    Excel Regex-cheat sheet

    Of 'n regex-patroon baie eenvoudig of uiters gesofistikeerd is, dit word gebou deur die algemene sintaksis te gebruik. Hierdie tutoriaal het nie ten doel om jou gereelde uitdrukkings te leer nie. Hiervoor is daar baie hulpbronne aanlyn, van gratis tutoriale vir beginners tot premium kursusse vir gevorderde gebruikers.

    Hieronder verskaf ons 'n vinnige verwysing na die hoof RegEx-patrone wat jou sal help om 'n begrip van die basiese beginsels te kry. Dit kan ook as jou cheat sheet werk wanneer jy verdere voorbeelde bestudeer.

    As jy gemaklik is met gereelde uitdrukkings, kan jy reguit na die RegExp-funksies spring.

    Karakters

    Hierdie is die patrone wat die meeste gebruik word om by sekere karakters te pas.

    In 5_cats*** , pas by ***
    Patroon Beskrywing Voorbeeld Patstes
    . Wildcard-karakter: pas by enige enkele karakter behalwe 'n reëlbreuk .ot punt , hot , pot , @ot
    \d Syferkarakter: enige enkele syfer van 0 tot 9 \d In a1b pas by 1
    \D Enige karakter wat NIE 'n syfer is nie \D In a1b pas by a en b
    \s Witspasiekarakter: spasie, oortjie, nuwe reël en koetretoer .\s. In 3 sent , pas by 3 c
    \S Enigenie-witspasie karakter \S+ In 30 sent pas by 30 en sent
    \w Woordkarakter: enige ASCII-letter, syfer of onderstreep \w+ In 5_cats*** , pas by 5_cats
    \W Enige karakter wat NIE 'n alfanumeriese karakter of onderstreep nie \W+
    \t Tab
    \n Nuwe reël \n\d+ In die tweereël string hieronder, pas by 10

    5 katte

    10 honde

    \ Ontkom spesiale betekenis van 'n karakter, sodat jy kan soek daarna \.

    \w+\.

    Ontsnap 'n punt sodat jy die letterlike "." karakter in 'n string

    Mnr. , Mev. , Prof.

    Karakterklasse

    Deur hierdie patrone te gebruik, kan jy elemente van verskillende karakterstelle pas.

    Patroon Beskrywing Voorbeeld Pas by enige karakter tussen hakies d[oi]g hond en dig
    [^karakters] Pas by enige enkele karakter NIE in die hakies nie d[^oi]g Pas dag, dug , d1g

    Pass nie by hond en dig

    [van–tot] Pas enige karakter in die reeks tussen diehakies [0-9]

    [a-z]

    [A-Z]

    Enige enkele syfer van 0 tot 9

    Enige enkele kleinletter

    Enige enkele hoofletter

    Kwantifiseerders

    Kwantifiseerders is spesiale uitdrukkings wat die aantal karakters spesifiseer om te pas. 'n Kwantifiseerder is altyd van toepassing op die karakter voor dit.

    Patroon Beskrywing Voorbeeld Patstes
    * Nul of meer voorkomste 1a* 1, 1a , 1aa, 1aaa , ens.
    + Een of meer gevalle po+ In pot , pas by po

    In swak pas by poo

    ? Nul of een voorkoms roa?d pad, staaf
    *? Nul of meer voorkomste, maar so minder as moontlik 1a*? In 1a , 1aa en 1aaa pas 1a
    +? Een of meer gevalle, maar so minder as moontlik po+? In pot en swak pas by po
    ?? Nul of een voorkoms , maar so minder as moontlik roa?? In pad en rod pas by ro
    {n} Pas n keer by die voorafgaande patroon \d{3} Presies 3 syfers
    {n ,} Pas by die voorafgaande patroon n of meer keer \d{3,} 3 of meer syfers
    {n,m} Pas by dievoorafgaande patroon tussen n en m keer \d{3,5} Van 3 tot 5 syfers

    Groepering

    Groepkonstruksies word gebruik om 'n substring van die bronstring vas te vang, sodat jy een of ander bewerking daarmee kan uitvoer.

    Sintaksis Beskrywing Voorbeeld Pastes
    (patroon) Vasgroep: vang 'n bypassende substring vas en ken 'n ranggetal daaraan toe (\d+) In 5 katte en 10 honde , vang 5 (groep 1) en 10 (groep 2)
    (?:patroon) Nie-vangende groep: pas by 'n groep, maar vang dit nie vas nie (\d+)(?: honde) In 5 katte en 10 honde , vang 10
    \1 Inhoud van groep 1 (\d+)\+(\d+)=\2\+\1 Pas 5+10=10+5 en vang 5 en 10 , wat in vanggroepe is
    \2 Inhoud van groep 2

    Ankers

    Ankers spesifiseer 'n posisie in die invoerstring waar om te soek 'n wedstryd.

    Anker Beskrywing Voorbeeld Wedstryde
    ^ Begin van string

    Let wel: [^binne hakies] beteken "nie"

    ^\d+ Enige aantal syfers by die begin van die tou.

    In 5 katte en 10 honde pas by 5

    $ Einde van string \d+$ Enige aantal syfers aan die einde van die string.

    In 10Y

    (?<=) Positiewe kyk agter (?<=Y)X Pas by uitdrukking X wanneer dit voorafgegaan word deur Y (d.w.s. as daar Y agter van X is)
    (? Negatiewe kyk agter (? Pas by uitdrukking X wanneer dit NIE voorafgegaan word deur Y nie

    Nou dat jy die noodsaaklikhede ken, kom ons gaan aan na die interessantste deel - gebruik regexes op regte data om stringe te ontleed en die vereiste inligting te vind. As jy meer besonderhede oor die sintaksis benodig, kan die Microsoft-gids oor Regular Expression Language nuttig wees.

    Gepasmaakte RegEx-funksies vir Excel

    Soos reeds genoem, het Microsoft Excel geen ingeboude RegEx-funksies nie. Om gereelde uitdrukkings te aktiveer, het ons drie pasgemaakte VBA-funksies (ook bekend as gebruikergedefinieerde funksies) geskep. Jy kan die kodes van die onderstaande geskakelde bladsye of van ons voorbeeld af kopieer werkboek, en plak dan jou eie Excel-lêers in.

    Hoe VBA RegExp-funksies werk

    Hierdie afdeling verduidelik die innerlike meganika en kan int. aan diegene wat presies wil weet wat by die agterkant gebeur.

    Om gereelde uitdrukkings in VBA te begin gebruik, moet jy óf die RegEx-objekverwysingsbiblioteek aktiveer óf die CreateObject-funksie gebruik. Om jou die moeite te bespaar om die verwysing in die VBA-redigeerder op te stel, het ons laasgenoemde benadering gekies.

    Die RegExp-objek het 4 eienskappe:

    • Patroon - is die patroon om in die invoerstring te pas.
    • Globaal - beheer of alle passings in die invoerstring of net die eerste een gevind moet word. In ons funksies is dit op Waar gestel om alle passings te kry.
    • MultiLine - bepaal of die patroon oor lynbreuke in multi-lyn stringe pas of slegs in die eerste reël. In ons kodes is dit op Waar gestel om in elke reël te soek.
    • IgnoreCase - definieer of 'n gewone uitdrukking hooflettergevoelig (verstek) of hoofletter- onsensitief (gestel op Waar). In ons geval hang dit af van hoe jy die opsionele match_case parameter instel. By verstek is al die funksies hooflettergevoelig .

    VBA RegExp-beperkings

    Excel VBA implementeer die noodsaaklike regex-patrone, maar dit het nie baie gevorderde kenmerke nie. beskikbaar in .NET, Perl, Java en ander regex-enjins. Byvoorbeeld, VBA RegExp ondersteun nie inlyn-wysigers soos (?i) vir hoofletter-onsensitiewe passing of (?m) vir multi-lynmodus, lookbehinds, POSIX-klasse, om 'n paar te noem.

    Excel Regex Pasfunksie

    Die RegExpMatch -funksie soek 'n invoerstring vir teks wat pas by 'n gereelde uitdrukking en gee WAAR as 'n pasmaat gevind word, anders ONWAAR.

    RegExpMatch(text, pattern, [ match_case])

    Waar:

    • Teks (vereis) - een of meer stringe om in te soek.
    • Patroon ( vereis) - die gereeldeuitdrukking om te pas.
    • Pasgeval (opsioneel) - pasmaattipe. WAAR of weggelaat - hooflettersensitief; ONWAAR - hoofletter-onsensitief

    Die funksie se kode is hier.

    Voorbeeld: hoe om gereelde uitdrukkings te gebruik om stringe te pas

    In die datastel hieronder, veronderstel jy wil hê om die inskrywings wat SKU-kodes bevat te identifiseer.

    Gegewe dat elke SKU begin met 2 hoofletters, gevolg deur 'n koppelteken, gevolg deur 4 syfers, kan jy hulle pas deur die volgende uitdrukking te gebruik.

    Patroon : \b[A-Z]{2}-\d{4}\b

    Waar [A-Z]{2} enige 2 hoofletters van A tot Z en \d{4 beteken } beteken enige 4 syfers van 0 tot 9. 'n Woordgrens \b dui aan dat 'n SKU 'n aparte woord is en nie deel van 'n groter string nie.

    Met die patroon vasgestel, begin 'n formule tik soos jy gewoonlik doen , en funksie se naam sal verskyn in die lys voorgestel deur Excel se AutoComplete:

    As die oorspronklike string in A5 is, gaan die formule soos volg:

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Geriefshalwe kan jy die gereelde uitdrukking in 'n aparte sel invoer en 'n absolute verwysing ($A$2) vir die patroon -argumen gebruik t. Dit verseker dat die seladres onveranderd bly wanneer jy die formule na ander selle kopieer:

    =RegExpMatch(A5, $A$2)

    Om jou eie teksetikette in plaas van WAAR en ONWAAR te vertoon, nes RegExpMatch in die IF-funksie en spesifiseer die verlangde tekste in die waarde_as_waar en waarde_as_onwaar plus 5 gee 15 , pas by 15

    \b Woordgrens \bjoy\b Pas vreugde as 'n aparte woord, maar nie in genot . \B NIE 'n woordgrens nie \Bjoy\B Pas vreugde in genot , maar nie as 'n aparte woord nie.

    Alternasie (OF) konstruk

    Die alternasie operand maak die OF logika moontlik, sodat jy óf hierdie óf daardie element kan pas.

    Konstruk Beskrywing Voorbeeld Passtryde

    Michael Brown is 'n toegewyde tegnologie-entoesias met 'n passie om komplekse prosesse te vereenvoudig deur sagteware-instrumente te gebruik. Met meer as 'n dekade se ondervinding in die tegnologiebedryf, het hy sy vaardighede in Microsoft Excel en Outlook, sowel as Google Sheets en Docs, opgeskerp. Michael se blog is toegewy daaraan om sy kennis en kundigheid met ander te deel, en verskaf maklik-om-te volg wenke en tutoriale vir die verbetering van produktiwiteit en doeltreffendheid. Of jy nou 'n ervare professionele persoon of 'n beginner is, Michael se blog bied waardevolle insigte en praktiese raad om die meeste uit hierdie noodsaaklike sagteware-nutsmiddels te kry.