Inhoudsopgave
Heeft u er ooit aan gedacht hoe krachtig Excel zou zijn als iemand zijn gereedschapskist zou verrijken met reguliere uitdrukkingen? Wij hebben er niet alleen aan gedacht, maar er ook aan gewerkt :) En nu kunt u deze prachtige RegEx functie toevoegen aan uw eigen werkmappen en substrings die overeenkomen met een patroon in een handomdraai uitwissen!
Vorige week hebben we bekeken hoe we reguliere expressies kunnen gebruiken om strings in Excel te vervangen. Hiervoor hebben we een aangepaste Regex Replace functie gemaakt. Het bleek dat de functie verder gaat dan zijn primaire gebruik en niet alleen strings kan vervangen, maar ook verwijderen. Hoe kan dat? In termen van Excel is het verwijderen van een waarde niets anders dan het vervangen door een lege string, iets dat onze Regex functie iserg goed in!
VBA RegExp functie om substrings te verwijderen in Excel
Zoals we allemaal weten, worden reguliere expressies niet standaard ondersteund in Excel. Om ze in te schakelen, moet u uw eigen door de gebruiker gedefinieerde functie maken. Het goede nieuws is dat een dergelijke functie al is geschreven, getest en klaar voor gebruik. U hoeft alleen maar deze code te kopiëren, in uw VBA-editor te plakken en vervolgens uw bestand op te slaan als een werkmap met macro's (.xlsm).
De functie heeft de volgende syntaxis:
RegExpReplace(tekst, patroon, vervanging, [instance_num], [match_case])De eerste drie argumenten zijn verplicht, de laatste twee zijn optioneel.
Waar:
- Tekst - de tekststring om in te zoeken.
- Patroon - de reguliere uitdrukking waarnaar moet worden gezocht.
- Vervanging - de tekst om door te vervangen. Naar substrings verwijderen die met het patroon overeenkomt, gebruik een lege tekenreeks ("") voor vervanging.
- Instance_num (optioneel) - de instantie die moet worden vervangen. Indien weggelaten, worden alle gevonden overeenkomsten vervangen (standaard).
- Geval (optioneel) - een Booleaanse waarde die aangeeft of de tekst al dan niet met hoofdletters en kleine letters moet overeenstemmen. Voor hoofdlettergevoelig overeenstemmen gebruikt u TRUE (standaard); voor hoofdletterongevoelig - FALSE.
Zie voor meer informatie de functie RegExpReplace.
Tip. In eenvoudige gevallen kunt u specifieke tekens of woorden uit cellen verwijderen met Excel-formules. Maar reguliere uitdrukkingen bieden hiervoor veel meer mogelijkheden.
Tekenreeksen verwijderen met reguliere uitdrukkingen - voorbeelden
Zoals gezegd, om delen van tekst die overeenkomen met een patroon te verwijderen, moet u ze vervangen door een lege tekenreeks. Een generieke formule neemt dus deze vorm aan:
RegExpReplace(tekst, patroon, "", [instance_num], [match_case])De onderstaande voorbeelden tonen verschillende implementaties van dit basisconcept.
Alle overeenkomsten of een specifieke overeenkomst verwijderen
De functie RegExpReplace is ontworpen om alle substrings te vinden die overeenkomen met een gegeven regex. Welke occurrences moeten worden verwijderd, wordt bepaald door het 4e optionele argument, genaamd instantie_nummer .
De standaardinstelling is "alle overeenkomsten" - wanneer de instantie_nummer argument is weggelaten, worden alle gevonden overeenkomsten verwijderd. Om een specifieke overeenkomst te verwijderen, definieert u het nummer van de instantie.
Stel dat u in de onderstaande strings het eerste bestelnummer wilt verwijderen. Al deze nummers beginnen met het hashteken (#) en bevatten precies 5 cijfers. We kunnen ze dus identificeren met deze regex:
Patroon .
De woordgrens geeft aan dat een overeenkomende substring geen deel kan uitmaken van een grotere string zoals #10000001.
Om alle overeenkomsten te verwijderen, moet de instantie_nummer argument is niet gedefinieerd:
=RegExpReplace(A5, "#\d{5}\b", "")
Om alleen het eerste voorkomen uit te roeien, stellen we de instantie_nummer argument op 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex om bepaalde tekens te verwijderen
Om bepaalde tekens uit een string te verwijderen, schrijft u alle ongewenste tekens op en scheidt u ze met een verticale streep.
Om bijvoorbeeld telefoonnummers in verschillende formaten te standaardiseren, schrappen we eerst specifieke tekens zoals haakjes, koppeltekens, punten en spaties.
Patroon : \(
=RegExpReplace(A5, "^^".
Het resultaat van deze bewerking is een getal van 10 cijfers zoals "1234567890".
Voor het gemak kunt u de regex in een aparte cel invoeren, en naar die cel verwijzen met een absolute verwijzing zoals $A$2:
=RegExpReplace(A5, $A$2, "")
En vervolgens kunt u de opmaak standaardiseren zoals u wilt, met behulp van de aaneenschakelingsoperator (&) en tekstfuncties als RECHTS, MIDDEN en LINKS.
Om bijvoorbeeld alle telefoonnummers in het formaat (123) 456-7890 te schrijven, is de formule:
="("&LINKS(B5, 3)&") "&MID(B5, 4, 3)&"-"&RECHTS(B5, 4)
Waarbij B5 de uitvoer is van de functie RegExpReplace.
Speciale tekens verwijderen met regex
In een van onze tutorials hebben we bekeken hoe u ongewenste tekens in Excel kunt verwijderen met behulp van ingebouwde en aangepaste functies. Reguliere expressies maken het een stuk eenvoudiger! In plaats van een lijst te maken van alle te verwijderen tekens, geeft u gewoon aan welke u wilt behouden :)
Het patroon is gebaseerd op ontkende karakterklassen - een caret wordt binnen een tekenklasse [^ ] geplaatst om overeen te komen met elk afzonderlijk teken dat NIET tussen haakjes staat. De + kwantor dwingt het om opeenvolgende tekens als een enkele overeenkomst te beschouwen, zodat een vervanging plaatsvindt voor een overeenkomende substring in plaats van voor elk afzonderlijk teken.
Kies, afhankelijk van uw behoeften, een van de volgende regexen.
Om te verwijderen niet-alfanumerieke tekens, d.w.z. alle tekens behalve letters en cijfers:
Patroon : [^0-9a-zA-Z]+
Om alle tekens te wissen behalve brieven , cijfers en ruimtes :
Patroon : [^0-9a-zA-Z ]+
Alle tekens verwijderen behalve brieven , cijfers en underscore , kunt u een teken gebruiken dat staat voor elk teken dat GEEN alfanumeriek teken of underscore is:
Patroon : \W+
Als u hou enkele andere karakters bijvoorbeeld leestekens, zet ze binnen de haakjes.
Om bijvoorbeeld elk ander teken dan een letter, cijfer, punt, komma of spatie weg te strepen, gebruikt u de volgende regex:
Patroon [^0-9a-zA-Z., ]+
Dit elimineert met succes alle speciale tekens, maar er blijft extra witruimte over.
Om dit op te lossen, kunt u de bovenstaande functie nestelen in een andere die meerdere spaties vervangt door een enkel spatieteken.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Of gebruik gewoon de eigen TRIM-functie met hetzelfde effect:
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex om niet-numerieke tekens te verwijderen
Om alle niet-numerieke tekens uit een tekenreeks te verwijderen, kunt u ofwel deze lange formule gebruiken ofwel een van de zeer eenvoudige regexen die hieronder worden opgesomd.
Komt overeen met elk teken dat GEEN cijfer is:
Patroon : \D+
Strip niet-numerieke tekens met behulp van ontkende klassen:
Patroon : [^0-9]+
Patroon : [^\d]+
Tip. Als u tekst wilt verwijderen en de resterende getallen in afzonderlijke cellen wilt morsen of ze allemaal in één cel wilt plaatsen, gescheiden door een gespecificeerd scheidingsteken, gebruik dan de functie RegExpExtract, zoals uitgelegd in Hoe kunt u getallen uit een tekenreeks extraheren met behulp van reguliere expressies?
Regex om alles na de spatie te verwijderen
Om alles na een spatie te wissen, gebruikt u ofwel de spatie ( ) of het teken voor witruimte (\s) om de eerste spatie te vinden en .* om alle tekens na de spatie te vinden.
Als u strings met één regel hebt die alleen normale spaties bevatten (waarde 32 in het 7-bits ASCII-systeem), maakt het niet veel uit welke van de onderstaande regexen u gebruikt. Bij strings met meerdere regels maakt het wel verschil.
Om alles te verwijderen na een spatie gebruik dan deze regex:
Patroon : " .*"
=RegExpReplace(A5, " .*", "")
Deze formule verwijdert alles na de eerste spatie in elke regel Voor een correcte weergave van de resultaten moet Wrap Text ingeschakeld zijn.
Om alles af te strepen na een spatie (inclusief een spatie, tab, carriage return en nieuwe regel), de regex is:
Patroon : \s.*
=RegExpReplace(A5, "\s.*", "")
Omdat \een aantal verschillende soorten spaties overeenkomt, waaronder een nieuwe lijn (\n), verwijdert deze formule alles na de eerste spatie in een cel, ongeacht het aantal regels.
Regex om tekst na specifiek karakter te verwijderen
Met de methoden uit het vorige voorbeeld kunt u tekst wissen na elk teken dat u opgeeft.
Om elke regel apart te behandelen:
Algemeen patroon : char.*
In éénregelige strings zal dit alles verwijderen na char In meerregelige strings wordt elke regel afzonderlijk verwerkt, omdat in de VBA Regex-smaak een punt (.) overeenkomt met elk teken behalve een nieuwe regel.
Om alle regels als een enkele string te verwerken:
Algemeen patroon : char(.
Om alles na een bepaald teken te wissen, inclusief nieuwe regels, wordt \n toegevoegd aan het patroon.
Om bijvoorbeeld tekst na de eerste komma in een tekenreeks te verwijderen, kunt u deze reguliere uitdrukkingen proberen:
Patroon : ,.*
Patroon : ,(.
In de onderstaande schermafbeelding kunt u zien hoe de uitkomsten verschillen.
Regex om alles voor de spatie te verwijderen
Wanneer u met lange tekstreeksen werkt, wilt u deze soms korter maken door in alle cellen hetzelfde deel van de informatie te verwijderen. Hieronder bespreken we twee van dergelijke gevallen.
Verwijder alles voor de laatste spatie
Net als in het vorige voorbeeld hangt een reguliere uitdrukking af van uw begrip van een "spatie".
Om iets aan de laatste ruimte zal deze regex volstaan (aanhalingstekens zijn toegevoegd om een spatie na een sterretje merkbaar te maken).
Patroon : ".* "
Om overeen te komen met iets voor de laatste witruimte (inclusief een spatie, tab, carriage return en nieuwe regel), gebruik dan deze reguliere uitdrukking.
Patroon : .*\s
Het verschil is vooral merkbaar bij meerregelige strings.
Strip alles voor de eerste spatie
Om alles tot en met de eerste spatie in een tekenreeks te evenaren, kunt u deze reguliere uitdrukking gebruiken:
Patroon : ^[^ ]* +
Vanaf het begin van een tekenreeks ^, komen we overeen met nul of meer niet-spatie tekens [^ ]* die onmiddellijk gevolgd worden door een of meer spaties " +". Het laatste deel wordt toegevoegd om mogelijke voorloopspaties in de resultaten te voorkomen.
Om tekst vóór de eerste spatie in elke regel te verwijderen, wordt de formule geschreven in de standaard "alle overeenkomsten" modus ( instantie_nummer weggelaten):
=RegExpReplace(A5, "^[^ ]* +", "")
Om tekst vóór de eerste spatie in de eerste regel te verwijderen, en alle andere regels intact te laten, is de optie instantie_nummer argument is ingesteld op 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex om alles voor het karakter weg te strepen
De eenvoudigste manier om alle tekst vóór een bepaald teken te verwijderen is met een regex als deze:
Algemeen patroon : ^[^char]*char
Vertaald in een menselijke taal zegt het: "vanaf het begin van een string verankerd door ^, kom overeen met 0 of meer tekens behalve char [^char]* tot het eerste voorkomen van char .
Om bijvoorbeeld alle tekst vóór de eerste dubbele punt te verwijderen, gebruikt u deze reguliere uitdrukking:
Patroon : ^[^:]*:
Om voorloopspaties in de resultaten te vermijden, voeg je aan het eind een spatie * toe. Dit verwijdert alles vóór de eerste dubbele punt en knipt alle spaties direct erna weg:
Patroon : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Tip. Naast reguliere uitdrukkingen heeft Excel zijn eigen middelen om tekst te verwijderen op basis van positie of overeenkomst. Om te leren hoe u deze taak kunt uitvoeren met eigen formules, zie Hoe verwijder ik tekst voor of na een teken in Excel.
Regex om alles te verwijderen behalve
Om alle tekens uit een tekenreeks te verwijderen, behalve de tekens die u wilt behouden, gebruikt u genegeerde tekenklassen.
Om bijvoorbeeld alle tekens behalve kleine letters en punten te verwijderen, is de regex:
Patroon : [^a-z.]+
In feite kunnen we hier zonder de + kwantificeerder, omdat onze functie alle gevonden overeenkomsten vervangt. De kwantificeerder maakt het alleen een beetje sneller - in plaats van elk individueel teken te behandelen, vervang je een substring.
=RegExpReplace(A5, "[^a-z.]+", "")
Regex om html tags te verwijderen in Excel
Allereerst moet worden opgemerkt dat HTML geen reguliere taal is, dus het pareren ervan met behulp van reguliere expressies is niet de beste manier. Dat gezegd hebbende, kunnen regexen zeker helpen om tags uit uw cellen te strippen om uw dataset schoner te maken.
Aangezien html-tags altijd tussen haakjes staan, kunt u ze vinden met een van de volgende regexen.
Negatieve klasse:
Patroon *>
Hier komen we overeen met een openingshoekhaak, gevolgd door nul of meer voorkomens van elk teken behalve de afsluitende hoekhaak [^>]* tot aan de dichtstbijzijnde afsluitende hoekhaak.
Lui zoeken:
Patroon :
Het vraagteken dwingt .* om met zo weinig mogelijk tekens te zoeken tot het een haakje vindt.
Welk patroon u ook kiest, het resultaat zal absoluut hetzelfde zijn.
Om bijvoorbeeld alle html-tags uit een string in A5 te verwijderen en tekst over te houden, is de formule:
=RegExpReplace(A5, "]*>", "")
Of u kunt de luie kwantor gebruiken zoals in de schermafbeelding:
Deze oplossing werkt perfect voor één tekst (rijen 5 - 9). Voor meerdere teksten (rijen 10 - 12) zijn de resultaten twijfelachtig - teksten van verschillende tags worden samengevoegd tot één. Is dit juist of niet? Ik ben bang dat het niet iets is dat gemakkelijk kan worden beslist - alles hangt af van uw begrip van het gewenste resultaat. Bijvoorbeeld, in B11 wordt het resultaat "A1" verwacht; terwijl u in B10 misschien wilt dat"data1" en "data2" moeten worden gescheiden door een spatie.
Om html-tags te verwijderen en de resterende teksten te scheiden met spaties, kunt u op deze manier te werk gaan:
- Vervang tags door spaties " ", niet door lege strings:
=RegExpReplace(A5, "]*>", " ")
- Verminder meerdere spaties tot een enkele spatie:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Snijd de voorste en achterste spaties weg:
=TRIM(RegExpReplace(A5, "]*>", " "), " +", " "))
Het resultaat ziet er ongeveer zo uit:
Ablebits Regex verwijderen
Als u een kans heeft gehad om onze Ultimate Suite voor Excel te gebruiken, heeft u waarschijnlijk al de nieuwe Regex Tools ontdekt die met de recente release zijn geïntroduceerd. Het mooie van deze .NET gebaseerde Regex functies is dat ze, ten eerste, volledige reguliere expressie syntax ondersteunen zonder VBA RegExp beperkingen, en ten tweede, geen VBA code in uw werkmappen hoeven in te voegen omdat alle code integratie wordt gedaandoor ons aan de achterkant.
Jouw deel van de taak is om een reguliere expressie te construeren en die aan de functie te geven :) Ik zal je laten zien hoe je dat doet aan de hand van een praktisch voorbeeld.
Hoe tekst tussen haakjes en haken verwijderen met regex
In lange tekststrings staat minder belangrijke informatie vaak tussen [haken] en (haakjes). Hoe verwijder je die irrelevante details zodat alle andere gegevens behouden blijven?
In feite hebben we al een soortgelijke regex gemaakt voor het verwijderen van html-tags, d.w.z. tekst binnen haakjes. Uiteraard werken dezelfde methoden ook voor vierkante en ronde haakjes.
Patroon : (\(.*?\))
De truc is het gebruik van een luie kwantor (*?) om met de kortst mogelijke substring overeen te komen. De eerste groep (\(.*?\)) komt overeen met alles van een openend haakje tot het eerste sluitende haakje. De tweede groep (\[.*?\]) komt overeen met alles van een openend haakje tot het eerste sluitende haakje. Een verticale balk
Met het patroon bepaald, laten we het "voeden" aan onze Regex Verwijder functie. Hier is hoe:
- Op de Ablebits gegevens tabblad, in de Tekst groep, klik Regex gereedschap .
Om de resultaten als formules en niet als waarden te krijgen, selecteert u de optie Invoegen als een formule check box.
Om tekst tussen haakjes te verwijderen uit strings in A2:A5 configureren we de instellingen als volgt:
Als gevolg daarvan is de AblebitsRegexRemove functie wordt ingevoegd in een nieuwe kolom naast uw oorspronkelijke gegevens.
De functie kan ook rechtstreeks in een cel worden ingevoerd via de standaard Functie invoegen dialoogvenster, waar het is gecategoriseerd onder AblebitsUDFs .
Als AblebitsRegexRemove is ontworpen om tekst te verwijderen, en heeft slechts twee argumenten nodig - de bronstring en de regex. Beide parameters kunnen rechtstreeks in een formule worden gedefinieerd of worden geleverd in de vorm van celverwijzingen. Indien nodig kan deze aangepaste functie samen met andere native functies worden gebruikt.
Om bijvoorbeeld extra spaties in de resulterende strings te trimmen, kunt u de TRIM-functie als wrapper gebruiken:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Dat is hoe je in Excel tekenreeksen kunt verwijderen met behulp van reguliere expressies. Ik dank u voor het lezen en zie u graag volgende week op onze blog!
Beschikbare downloads
Tekenreeksen verwijderen met regex - voorbeelden (.xlsm-bestand)
Ultimate Suite - proefversie (.exe bestand)