Excel RegEx voorbeelden: reguliere uitdrukkingen gebruiken in formules

  • Deel Dit
Michael Brown

Kunt u nooit begrijpen waarom reguliere uitdrukkingen niet worden ondersteund in Excel-formules? Nu wel :) Met onze aangepaste functies kunt u gemakkelijk strings vinden, vervangen, extraheren en verwijderen die overeenkomen met een specifiek patroon.

Op het eerste gezicht heeft Excel alles wat je nodig hebt voor het manipuleren van tekststrengen. Hmm... hoe zit het met reguliere expressies? Oeps, er zijn geen ingebouwde Regex functies in Excel. Maar niemand zegt dat we niet onze eigen functies kunnen maken :)

    Wat is een reguliere uitdrukking?

    Een reguliere expressie (ook wel regex of regexp ) is een speciaal gecodeerde reeks tekens die een zoekpatroon definieert. Met behulp van dat patroon kunt u een overeenkomende tekencombinatie vinden in een tekenreeks of gegevensinvoer valideren. Als u bekend bent met een wildcardnotatie, kunt u regexen zien als een geavanceerde versie van wildcards.

    Reguliere uitdrukkingen hebben hun eigen syntaxis die bestaat uit speciale tekens, operatoren en constructies. Bijvoorbeeld, [0-5] komt overeen met elk enkel cijfer van 0 tot 5.

    Reguliere uitdrukkingen worden gebruikt in vele programmeertalen, waaronder JavaScript en VBA. Deze laatste heeft een speciaal RegExp-object, dat we zullen gebruiken om onze aangepaste functies te maken.

    Ondersteunt Excel regex?

    Helaas zijn er geen ingebouwde Regex functies in Excel. Om reguliere expressies te kunnen gebruiken in uw formules zult u uw eigen gebruikersgedefinieerde functie moeten maken (VBA of .NET gebaseerd) of tools van derden installeren die regexen ondersteunen.

    Excel Regex spiekbriefje

    Of een regex-patroon nu heel eenvoudig of uiterst geavanceerd is, het wordt opgebouwd met behulp van de gebruikelijke syntaxis. Deze tutorial heeft niet tot doel u reguliere expressies te leren. Daarvoor zijn er online genoeg bronnen, van gratis tutorials voor beginners tot premium cursussen voor gevorderden.

    Hieronder vindt u een snel overzicht van de belangrijkste RegEx-patronen die u zullen helpen de basis te begrijpen. Het kan ook dienen als spiekbriefje bij het bestuderen van verdere voorbeelden.

    Als u vertrouwd bent met reguliere uitdrukkingen, kunt u direct naar de RegExp-functies gaan.

    Personages

    Dit zijn de meest gebruikte patronen om met bepaalde tekens overeen te komen.

    Patroon Beschrijving Voorbeeld Wedstrijden
    . Jokerteken: komt overeen met elk afzonderlijk teken behalve een regeleinde .ot punt , heet , pot , @ot
    \d Cijferteken: elk cijfer van 0 tot 9 \d In a1b , wedstrijden 1
    \D Elk teken dat GEEN cijfer is \D In a1b , wedstrijden a en b
    \s Whitespace-teken: spatie, tab, nieuwe regel en carriage return .\s. In 3 centen , wedstrijden 3 c
    \S Elk niet-whitespace karakter \S+ In 30 cent , wedstrijden 30 en centen
    \w Woordteken: elke ASCII-letter, cijfer of underscore \w+ In 5_cats*** , wedstrijden 5 katten
    \W Elk teken dat GEEN alfanumeriek teken of underscore is \W+ In 5_cats*** , wedstrijden ***
    \t Tab
    \n Nieuwe lijn \en In de onderstaande tweeregelige string komt overeen met 10

    5 katten

    10 honden

    \ Ontsnapt speciale betekenis van een karakter, zodat je het kunt opzoeken \.

    \w+\.

    Escapeert een punt zodat u het letterlijke "." teken in een string kunt vinden.

    Mr. , Mevrouw. , Prof.

    Karakter klassen

    Met deze patronen kunt u elementen van verschillende tekensets matchen.

    Patroon Beschrijving Voorbeeld Wedstrijden
    [tekens] Komt overeen met elk afzonderlijk teken tussen de haakjes d[oi]g hond en dig
    [^characters] Komt overeen met elk afzonderlijk teken dat NIET tussen de haakjes staat. d[^oi]g Wedstrijden dag, dug , d1g

    Komt niet overeen hond en dig

    [van-tot] Komt overeen met elk teken in het bereik tussen de haakjes [0-9]

    [a-z]

    [A-Z]

    Elk cijfer van 0 tot 9

    Elke enkele kleine letter

    Elke enkele hoofdletter

    Kwantificeerders

    Kwantificeerders zijn speciale uitdrukkingen die het aantal overeen te komen tekens specificeren. Een kwantificeerder is altijd van toepassing op het teken ervoor.

    Patroon Beschrijving Voorbeeld Wedstrijden
    * Nul of meer voorvallen 1a* 1, 1a , 1aa, 1aaa enz.
    + Een of meer voorvallen po+ In pot , wedstrijden po

    In arme , wedstrijden poo

    ? Nul of één voorval roa? weg, staaf
    *? Nul of meer voorvallen, maar zo weinig mogelijk 1a*? In 1a , 1aa en 1aaa , wedstrijden 1a
    +? Een of meer voorvallen, maar zo weinig mogelijk po+? In pot en arme , wedstrijden po
    ?? Nul of één keer, maar zo weinig mogelijk. roa?? In weg en staaf , wedstrijden ro
    {n} Komt overeen met het voorgaande patroon n keer \d{3} Precies 3 cijfers.
    {n,} Komt overeen met het voorgaande patroon n of meer keren \d{3,} 3 of meer cijfers
    {n,m} Komt overeen met het voorgaande patroon tussen n en m keer \d{3,5} Van 3 tot 5 cijfers

    Groepering

    Groeperingsconstructies worden gebruikt om een substring van de bronstring vast te leggen, zodat u er een bewerking mee kunt uitvoeren.

    Syntax Beschrijving Voorbeeld Wedstrijden
    (patroon) Capturing group: vangt een overeenkomende substring en kent er een rangnummer aan toe (\d+) In 5 katten en 10 honden , vangt 5 (groep 1) en 10 (groep 2)
    (?:patroon) Non-capturing group: komt overeen met een groep maar vangt deze niet op (?: honden) In 5 katten en 10 honden , vangt 10
    \1 Inhoud van groep 1 (\d+) \1 Wedstrijden 5+10=10+5 en vangt 5 en 10 die in het vangen van groepen
    \2 Inhoud van groep 2

    Ankers

    Ankers geven een positie in de invoerstring aan waar moet worden gezocht naar een overeenkomst.

    Anker Beschrijving Voorbeeld Wedstrijden
    ^ Begin van de string

    Opmerking: [^tussen haakjes] betekent "niet".

    ^\d+ Een willekeurig aantal cijfers aan het begin van de string.

    In 5 katten en 10 honden , wedstrijden 5

    $ Einde van de string \d+$ Een willekeurig aantal cijfers aan het einde van de string.

    In 10 plus 5 geeft 15 komt overeen met 15

    \b Woordgrens \plezier. Wedstrijden joy als een apart woord, maar niet in plezierig .
    \B NIET een woordgrens \joyB Wedstrijden joy in plezierig maar niet als een apart woord.

    Afwisseling (OR) constructie

    De alternatie operand maakt de OR-logica mogelijk, zodat u zowel met dit als met dat element kunt overeenkomen.

    Construeer Beschrijving Voorbeeld Wedstrijden
    Komt overeen met elk afzonderlijk element gescheiden door de verticale balk (s In ze verkoopt zeeschelpen, komt overeen met verkoopt en schelpen

    Look-arounds

    Lookaround constructies zijn nuttig wanneer u iets wilt overeenkomen dat al dan niet wordt gevolgd of voorafgegaan door iets anders. Deze expressies worden soms "nul-breedte asserties" of "nul-breedte match" genoemd omdat ze overeenkomen met een positie in plaats van met werkelijke tekens.

    Opmerking: in de VBA RegEx-smaak worden lookbehinds niet ondersteund.

    Patroon Beschrijving Voorbeeld Wedstrijden
    (?=) Positieve vooruitblik X(?=Y) Komt overeen met uitdrukking X wanneer deze wordt gevolgd door Y (d.w.z. als Y vóór X staat)
    (?!) Negatieve vooruitblik X(?!Y) Komt overeen met uitdrukking X als deze NIET wordt gevolgd door Y
    (?<=) Positieve blik achterom (?<=Y)X Komt overeen met uitdrukking X als deze wordt voorafgegaan door Y (d.w.z. als er Y achter X staat)
    (? )</td Negatieve lookbehind (? Y)X</td Komt overeen met uitdrukking X wanneer deze NIET wordt voorafgegaan door Y

    Nu u de essentie kent, gaan we over tot het interessantste deel - regexen gebruiken op echte gegevens om strings te ontleden en de vereiste informatie te vinden. Als u meer details nodig hebt over de syntaxis, kan de Microsoft-gids over Regular Expression Language nuttig zijn.

    Aangepaste RegEx-functies voor Excel

    Zoals reeds vermeld, heeft Microsoft Excel geen ingebouwde RegEx-functies. Om reguliere uitdrukkingen mogelijk te maken, hebben wij drie aangepaste VBA-functies (ook wel gebruikersgedefinieerde functies genoemd) gemaakt. U kunt de codes kopiëren van de hieronder gelinkte pagina's of van onze voorbeeldwerkmap, en ze vervolgens in uw eigen Excel-bestanden plakken.

    Hoe VBA RegExp-functies werken

    Dit deel legt de interne werking uit en kan interessant zijn voor wie precies wil weten wat er aan de achterkant gebeurt.

    Om reguliere uitdrukkingen in VBA te gaan gebruiken, moet u ofwel de bibliotheek met RegEx-objectverwijzingen activeren, ofwel de functie CreateObject gebruiken. Om u de moeite te besparen de verwijzing in de VBA-editor in te stellen, hebben wij voor de laatste aanpak gekozen.

    Het RegExp-object heeft 4 eigenschappen:

    • Patroon - is de patroon in de invoerstring.
    • Wereldwijd - bepaalt of alle overeenkomsten in de invoerstring moeten worden gevonden of alleen de eerste. In onze functies is het ingesteld op True om te krijgen alle wedstrijden .
    • MultiLine - bepaalt of het patroon over regeleinden in meerregelige strings of alleen in de eerste regel moet worden gevonden. In onze codes is het ingesteld op True om te zoeken in in elke lijn .
    • IgnoreCase - bepaalt of een reguliere uitdrukking hoofdlettergevoelig (standaard) of hoofdletterongevoelig (ingesteld op True) is. In ons geval hangt dat af van hoe u de optionele match_case parameter. Standaard zijn alle functies hoofdlettergevoelig .

    VBA RegExp beperkingen

    Excel VBA implementeert de essentiële regex patronen, maar mist veel geavanceerde functies die beschikbaar zijn in .NET, Perl, Java en andere regex engines. Bijvoorbeeld, VBA RegExp ondersteunt geen inline modifiers zoals (?i) voor hoofdletter-ongevoelige matching of (?m) voor multi-line mode, lookbehinds, POSIX classes, om er een paar te noemen.

    Excel Regex Match functie

    De RegExpMatch De functie zoekt in een invoerstring naar tekst die overeenkomt met een reguliere uitdrukking en geeft WAAR als een overeenkomst is gevonden, anders ONWAAR.

    RegExpMatch(tekst, patroon, [match_case])

    Waar:

    • Tekst (verplicht) - een of meer tekenreeksen om in te zoeken.
    • Patroon (vereist) - de reguliere uitdrukking die moet worden gebruikt.
    • Geval (optioneel) - match type. TRUE of weggelaten - hoofdlettergevoelig; FALSE - hoofdletterongevoelig.

    De code van de functie staat hier.

    Voorbeeld: hoe reguliere expressies te gebruiken om strings te matchen

    Stel dat u in de onderstaande dataset de gegevens wilt identificeren die SKU-codes bevatten.

    Aangezien elk SKU begint met 2 hoofdletters, gevolgd door een koppelteken, gevolgd door 4 cijfers, kunt u ze vergelijken met de volgende uitdrukking.

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

    Waarbij [A-Z]{2} alle 2 hoofdletters van A tot Z betekent en \d{4} alle 4 cijfers van 0 tot 9. Een woordgrens \b geeft aan dat een SKU een apart woord is en geen onderdeel van een grotere string.

    Nu het patroon is vastgesteld, begint u een formule te typen zoals u gewoonlijk doet, en de naam van de functie verschijnt in de lijst die wordt voorgesteld door Excel's autoaanvullen:

    Ervan uitgaande dat de oorspronkelijke string in A5 staat, gaat de formule als volgt:

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

    Voor het gemak kunt u de reguliere uitdrukking in een aparte cel invoeren en een absolute verwijzing ($A$2) gebruiken voor de patroon Dit zorgt ervoor dat het celadres ongewijzigd blijft wanneer u de formule naar andere cellen kopieert:

    =RegExpMatch(A5, $A$2)

    Om uw eigen tekstlabels weer te geven in plaats van TRUE en FALSE, nestelt u RegExpMatch in de IF-functie en specificeert u de gewenste teksten in de waarde_indien_waar en waarde_als_vals argumenten:

    =IF(RegExpMatch(A5, $A$2), "Ja", "Nee")

    Zie voor meer formulevoorbeelden:

    • Tekenreeksen matchen met reguliere expressies
    • Excel gegevensvalidatie met regexen

    Excel Regex extract functie

    De RegExpExtract functie zoekt naar substrings die overeenkomen met een reguliere uitdrukking en haalt alle overeenkomsten of een specifieke overeenkomst eruit.

    RegExpExtract(tekst, patroon, [instance_num], [match_case])

    Waar:

    • Tekst (verplicht) - de tekststring om in te zoeken.
    • Patroon (vereist) - de reguliere uitdrukking die moet worden gebruikt.
    • Instance_num (optioneel) - een volgnummer dat aangeeft welke instantie moet worden uitgepakt. Indien weggelaten, worden alle gevonden overeenkomsten geretourneerd (standaard).
    • Geval (facultatief) - bepaalt of de tekstgevallen moeten overeenstemmen (TRUE of weggelaten) of worden genegeerd (FALSE).

    U kunt de code van de functie hier krijgen.

    Voorbeeld: hoe tekenreeksen te extraheren met behulp van reguliere uitdrukkingen

    Laten we ons voorbeeld wat verder uitwerken en factuurnummers extraheren. Hiervoor gebruiken we een zeer eenvoudige regex die overeenkomt met elk 7-cijferig getal:

    Patroon .

    Zet het patroon in A2 en je klaart de klus met deze compacte en elegante formule:

    =RegExpExtract(A5, $A$2)

    Als er een patroon wordt gevonden, haalt de formule een factuurnummer eruit, als er geen overeenkomst wordt gevonden - wordt er niets teruggestuurd.

    Voor meer voorbeelden, zie: Hoe tekenreeksen te extraheren in Excel met behulp van regex.

    Excel Regex Vervangen functie

    De RegExpReplace functie vervangt de waarden die overeenkomen met een regex door de tekst die u opgeeft.

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

    Waar:

    • Tekst (verplicht) - de tekststring om in te zoeken.
    • Patroon (vereist) - de reguliere uitdrukking die moet worden gebruikt.
    • Vervanging (verplicht) - de tekst om de overeenkomende subteksten door te vervangen.
    • Instance_num (optioneel) - de instantie die moet worden vervangen. De standaardinstelling is "alle overeenkomsten".
    • Geval (facultatief) - bepaalt of de tekst moet overeenstemmen (TRUE of weggelaten) of genegeerd (FALSE) moet worden.

    De code van de functie is hier beschikbaar.

    Voorbeeld: hoe tekenreeksen vervangen of verwijderen met behulp van regexen

    Sommige van onze records bevatten kredietkaartnummers. Deze informatie is vertrouwelijk, en u wilt deze misschien vervangen door iets anders of helemaal verwijderen. Beide taken kunnen worden uitgevoerd met behulp van de RegExpReplace Hoe? In een tweede scenario vervangen we door een lege string.

    In onze voorbeeldtabel hebben alle kaartnummers 16 cijfers, die in 4 groepen zijn geschreven, gescheiden door spaties. Om ze te vinden, herhalen we het patroon met deze reguliere expressie:

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

    Ter vervanging wordt de volgende string gebruikt:

    Vervanging : XXXX XXXX XXXX XXXX

    En hier is een volledige formule om vervangen creditcardnummers met ongevoelige informatie:

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

    Met de regex en de vervangende tekst in afzonderlijke cellen (A2 en B2) werkt de formule even goed:

    In Excel is "verwijderen" een bijzonder geval van "vervangen". Naar verwijderen creditcardnummers, gebruik dan een lege tekenreeks ("") voor de vervanging argument:

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

    Tip. Om lege regels in de resultaten te verwijderen, kunt u een andere RegExpReplace-functie gebruiken zoals in dit voorbeeld: Hoe lege regels verwijderen met regex.

    Voor meer informatie, zie:

    • Tekenreeksen vervangen in Excel met regex
    • Tekenreeksen verwijderen met regex
    • Whitespace wegstrepen met regexen

    Regex-tools om subtekenreeksen te matchen, extraheren, vervangen en verwijderen

    De gebruikers van onze Ultimate Suite kunnen alle kracht van reguliere expressies krijgen zonder ook maar één regel code in hun werkmappen in te voegen. Alle benodigde code is geschreven door onze ontwikkelaars en wordt soepel geïntegreerd in uw Excel tijdens de installatie.

    In tegenstelling tot de hierboven besproken VBA-functies, zijn de functies van Ultimate Suite .NET gebaseerd, wat twee belangrijke voordelen biedt:

    1. U kunt reguliere expressies gebruiken in normale .xlsx-werkmappen zonder VBA-code toe te voegen en ze op te slaan als macrobestanden.
    2. .NET Regex engine ondersteunt klassieke reguliere expressies met volledige functionaliteit, waarmee u meer geavanceerde patronen kunt construeren.

    Regex gebruiken in Excel

    Met de Ultimate Suite geïnstalleerd, is het gebruik van reguliere expressies in Excel zo eenvoudig als deze twee stappen:

    1. Op de Ablebits gegevens tabblad, in de Tekst groep, klik Regex gereedschap .

    2. Op de Regex gereedschap doe het volgende:
      • Selecteer de brongegevens.
      • Voer uw regexpatroon in.
      • Kies de gewenste optie: Wedstrijd , Uittreksel , Verwijder of Vervang .
      • Om het resultaat als formule en niet als waarde te krijgen, selecteert u de Invoegen als een formule check box.
      • Druk op de actieknop.

      Om bijvoorbeeld creditcardnummers uit de cellen A2:A6 te verwijderen, configureren we deze instellingen:

    In een handomdraai wordt een AblebitsRegex-functie ingevoegd in een nieuwe kolom rechts van uw oorspronkelijke gegevens. In ons geval is de formule:

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

    Zodra de formule er is, kunt u deze bewerken, kopiëren of verplaatsen zoals elke inheemse formule.

    Hoe een Regex-formule rechtstreeks in een cel invoegen

    De AblebitsRegex-functies kunnen ook rechtstreeks in een cel worden ingevoegd zonder de interface van de add-in te gebruiken. Hier wordt uitgelegd hoe:

    1. Klik op de fx knop op de formulebalk of Functie invoegen op de Formules tab.
    2. In de Functie invoegen dialoogvenster, selecteer de AblebitsUDFs categorie, kies de gewenste functie en klik op OK.

    3. Definieer de argumenten van de functie zoals je normaal doet en klik op OK. Klaar!

    Voor meer informatie, zie Regex Tools for Excel.

    Zo gebruik je reguliere uitdrukkingen om tekst in Excel-cellen te matchen, extraheren, vervangen en verwijderen. Ik dank je voor het lezen en zie je graag volgende week op onze blog!

    Beschikbare downloads

    Excel Regex - formulevoorbeelden (.xlsm-bestand)

    Ultimate Suite - proefversie (.exe bestand)

    Michael Brown is een toegewijde technologieliefhebber met een passie voor het vereenvoudigen van complexe processen met behulp van softwaretools. Met meer dan tien jaar ervaring in de technische industrie heeft hij zijn vaardigheden in Microsoft Excel en Outlook, evenals Google Spreadsheets en Documenten aangescherpt. Michael's blog is gewijd aan het delen van zijn kennis en expertise met anderen, met eenvoudig te volgen tips en tutorials voor het verbeteren van de productiviteit en efficiëntie. Of je nu een doorgewinterde professional of een beginner bent, Michaels blog biedt waardevolle inzichten en praktisch advies om het meeste uit deze essentiële softwaretools te halen.