Regex zum Entfernen bestimmter Zeichen oder Texte in Excel

  • Teile Das
Michael Brown

Haben Sie schon einmal darüber nachgedacht, wie mächtig Excel wäre, wenn jemand seine Toolbox mit regulären Ausdrücken bereichern könnte? Wir haben nicht nur gedacht, sondern auch daran gearbeitet :) Und jetzt können Sie diese wunderbare RegEx-Funktion zu Ihren eigenen Arbeitsmappen hinzufügen und Teilstrings, die einem Muster entsprechen, im Handumdrehen auslöschen!

Letzte Woche haben wir uns angeschaut, wie man reguläre Ausdrücke zum Ersetzen von Zeichenketten in Excel verwenden kann. Dazu haben wir eine benutzerdefinierte Regex-Ersetzungsfunktion erstellt. Wie sich herausstellte, geht die Funktion über ihre primäre Verwendung hinaus und kann Zeichenketten nicht nur ersetzen, sondern auch entfernen. Wie kann das sein? In Bezug auf Excel ist das Entfernen eines Wertes nichts anderes als das Ersetzen durch eine leere Zeichenkette, etwas, das unsere Regex-Funktion istsehr gut beherrschen!

    VBA RegExp-Funktion zum Entfernen von Teilstrings in Excel

    Wie wir alle wissen, werden reguläre Ausdrücke in Excel nicht standardmäßig unterstützt. Um sie zu aktivieren, müssen Sie eine eigene benutzerdefinierte Funktion erstellen. Die gute Nachricht ist, dass eine solche Funktion bereits geschrieben, getestet und einsatzbereit ist. Alles, was Sie tun müssen, ist, diesen Code zu kopieren, ihn in Ihren VBA-Editor einzufügen und Ihre Datei dann als makrofähige Arbeitsmappe (.xlsm).

    Die Funktion hat die folgende Syntax:

    RegExpReplace(text, muster, ersatz, [instance_num], [match_case])

    Die ersten drei Argumente sind erforderlich, die letzten beiden sind optional.

    Wo:

    • Text - die Textzeichenfolge, in der gesucht werden soll.
    • Muster - der reguläre Ausdruck, nach dem gesucht werden soll.
    • Ersatz - den zu ersetzenden Text. zu Teilstrings entfernen die dem Muster entsprechen, verwenden Sie eine leere Zeichenkette ("") zu ersetzen.
    • Instanz_num (optional) - die zu ersetzende Instanz; wird sie nicht angegeben, werden alle gefundenen Übereinstimmungen ersetzt (Standard).
    • Match_case (optional) - ein boolescher Wert, der angibt, ob die Groß-/Kleinschreibung des Textes beachtet werden soll oder nicht (Standardeinstellung TRUE); für die Nichtbeachtung der Groß-/Kleinschreibung - FALSE.

    Weitere Informationen finden Sie unter RegExpReplace-Funktion.

    Tipp: In einfachen Fällen können Sie mit Excel-Formeln bestimmte Zeichen oder Wörter aus den Zellen entfernen. Aber reguläre Ausdrücke bieten dafür viel mehr Möglichkeiten.

    Entfernen von Zeichenketten mit regulären Ausdrücken - Beispiele

    Wie bereits erwähnt, müssen Sie Textteile, die einem Muster entsprechen, durch eine leere Zeichenkette ersetzen. Eine allgemeine Formel sieht also so aus:

    RegExpReplace(text, muster, "", [instance_num], [match_case])

    Die folgenden Beispiele zeigen verschiedene Umsetzungen dieses Grundkonzepts.

    Alle Treffer oder bestimmte Treffer entfernen

    Die Funktion RegExpReplace dient dazu, alle Teilzeichenfolgen zu finden, die mit einem gegebenen Regex übereinstimmen. Welche Vorkommen entfernt werden sollen, wird durch das 4. optionale Argument gesteuert, das Instanz_num .

    Die Standardeinstellung ist "alle Treffer" - wenn die Instanz_num Argument weggelassen wird, werden alle gefundenen Übereinstimmungen entfernt. Um eine bestimmte Übereinstimmung zu löschen, geben Sie die Instanznummer an.

    Nehmen wir an, Sie möchten in den unten stehenden Zeichenfolgen die erste Bestellnummer löschen. Alle diese Nummern beginnen mit dem Rautenzeichen (#) und enthalten genau 5 Ziffern. Wir können sie also mit dieser Regex identifizieren:

    Muster : #\d{5}\b

    Die Wortgrenze \b gibt an, dass eine übereinstimmende Teilzeichenkette nicht Teil einer größeren Zeichenkette wie #10000001 sein kann.

    Um alle Übereinstimmungen zu entfernen, muss die Instanz_num ist nicht definiert:

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

    Um nur das erste Vorkommen auszumerzen, setzen wir die Instanz_num Argument auf 1:

    =RegExpReplace(A5, "#\d{5}\b", "", 1)

    Regex zum Entfernen bestimmter Zeichen

    Um bestimmte Zeichen aus einer Zeichenkette zu entfernen, schreiben Sie einfach alle unerwünschten Zeichen auf und trennen Sie sie durch einen senkrechten Strich

    Um beispielsweise Telefonnummern in verschiedenen Formaten zu standardisieren, werden zunächst bestimmte Zeichen wie Klammern, Bindestriche, Punkte und Leerzeichen entfernt.

    Muster : \(

    =RegExpReplace(A5, "\(

    Das Ergebnis dieser Operation ist eine 10-stellige Zahl wie "1234567890".

    Der Einfachheit halber können Sie die Regex in eine separate Zelle eingeben und sich mit einem absoluten Verweis wie $A$2 auf diese Zelle beziehen:

    =RegExpReplace(A5, $A$2, "")

    Und dann können Sie die Formatierung nach Ihren Wünschen standardisieren, indem Sie den Verkettungsoperator (&) und Textfunktionen wie RIGHT, MID und LEFT verwenden.

    Um zum Beispiel alle Telefonnummern im Format (123) 456-7890 zu schreiben, lautet die Formel:

    ="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)

    Dabei ist B5 die Ausgabe der Funktion RegExpReplace.

    Sonderzeichen mit Regex entfernen

    In einem unserer Tutorials haben wir uns angeschaut, wie man unerwünschte Zeichen in Excel mit Hilfe von eingebauten und benutzerdefinierten Funktionen entfernt. Reguläre Ausdrücke machen die Sache viel einfacher! Anstatt alle zu löschenden Zeichen aufzulisten, geben Sie einfach die an, die Sie behalten möchten :)

    Das Muster basiert auf negierte Zeichenklassen - wird ein Caret in eine Zeichenklasse [^ ] gesetzt, um auf jedes einzelne Zeichen zu passen, das NICHT in Klammern steht. Der Quantifizierer + zwingt dazu, aufeinanderfolgende Zeichen als eine einzige Übereinstimmung zu betrachten, so dass eine Ersetzung für eine übereinstimmende Teilzeichenkette und nicht für jedes einzelne Zeichen vorgenommen wird.

    Wählen Sie je nach Bedarf eine der folgenden Regexe.

    Zum Entfernen nicht alphanumerisch Zeichen, d.h. alle Zeichen außer Buchstaben und Ziffern:

    Muster [^0-9a-zA-Z]+

    So löschen Sie alle Zeichen außer Buchstaben , Ziffern und Räume :

    Muster : [^0-9a-zA-Z ]+

    So löschen Sie alle Zeichen außer Buchstaben , Ziffern und Unterstrich können Sie \W verwenden, das für ein beliebiges Zeichen steht, das KEIN alphanumerisches Zeichen oder Unterstrich ist:

    Muster : \W+

    Wenn Sie möchten, dass einige andere Zeichen behalten z. B. Satzzeichen, setzen Sie sie in die Klammern.

    Um zum Beispiel alle Zeichen außer Buchstaben, Ziffern, Punkten, Kommas oder Leerzeichen zu entfernen, verwenden Sie die folgende Regex:

    Muster : [^0-9a-zA-Z\., ]+

    Dadurch werden zwar alle Sonderzeichen entfernt, aber es bleiben zusätzliche Leerzeichen übrig.

    Um dies zu beheben, können Sie die obige Funktion in eine andere verschachteln, die mehrere Leerzeichen durch ein einzelnes Leerzeichen ersetzt.

    =RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")

    Sie können auch die systemeigene TRIM-Funktion verwenden, die den gleichen Effekt hat:

    =TRIM(RegExpReplace(A5, $A$2, ""))

    Regex zum Entfernen nicht-numerischer Zeichen

    Um alle nicht-numerischen Zeichen aus einer Zeichenkette zu löschen, können Sie entweder diese lange Formel oder eine der unten aufgeführten sehr einfachen Regexes verwenden.

    Entspricht jedem Zeichen, das KEINE Ziffer ist:

    Muster : \D+

    Nicht-numerische Zeichen werden mit Hilfe von negierten Klassen entfernt:

    Muster : [^0-9]+

    Muster : [^\d]+

    Tipp: Wenn Ihr Ziel darin besteht, Text zu entfernen und die verbleibenden Zahlen in separaten Zellen unterzubringen oder sie alle in einer Zelle mit einem bestimmten Trennzeichen zu platzieren, dann verwenden Sie die Funktion RegExpExtract, wie in Zahlen aus einer Zeichenkette mit regulären Ausdrücken extrahieren beschrieben.

    Regex um alles nach dem Leerzeichen zu entfernen

    Um alles nach einem Leerzeichen zu löschen, verwenden Sie entweder das Leerzeichen ( ) oder das Leerzeichen (\s), um das erste Leerzeichen zu finden, und .*, um alle nachfolgenden Zeichen zu finden.

    Bei einzeiligen Zeichenfolgen, die nur normale Leerzeichen enthalten (Wert 32 im 7-Bit-ASCII-System), spielt es keine Rolle, welche der unten aufgeführten Regexe Sie verwenden. Bei mehrzeiligen Zeichenfolgen macht es einen Unterschied.

    Um alles zu entfernen nach einem Leerzeichen verwenden Sie diese Regex:

    Muster : " .*"

    =RegExpReplace(A5, " .*", "")

    Diese Formel entfernt alles nach dem ersten Leerzeichen in jede Zeile Damit die Ergebnisse korrekt angezeigt werden, müssen Sie den Textumbruch aktivieren.

    Alles ausziehen nach einem Whitespace (einschließlich Leerzeichen, Tabulator, Wagenrücklauf und Zeilenumbruch), lautet die Regex:

    Muster : \s.*

    =RegExpReplace(A5, "\s.*", "")

    Weil \s auf einige verschiedene Leerraumtypen passt, darunter eine neue Zeile (\n) wird mit dieser Formel alles nach dem ersten Leerzeichen in einer Zelle gelöscht, unabhängig davon, wie viele Zeilen die Zelle enthält.

    Regex zum Entfernen von Text nach einem bestimmten Zeichen

    Mit den Methoden aus dem vorangegangenen Beispiel können Sie Text nach jedem beliebigen Zeichen löschen, das Sie angeben.

    Um jede Zeile separat zu behandeln:

    Generisches Muster : char.*

    Bei einzeiligen Zeichenketten wird damit alles nach char Bei mehrzeiligen Zeichenfolgen wird jede Zeile einzeln verarbeitet, da in der VBA-Regex-Variante ein Punkt (.) auf jedes Zeichen außer einer neuen Zeile passt.

    Um alle Zeilen als eine einzige Zeichenkette zu verarbeiten:

    Generisches Muster : char(.

    Um alles nach einem bestimmten Zeichen zu löschen, einschließlich neuer Zeilen, wird \n zum Muster hinzugefügt.

    Um zum Beispiel Text nach dem ersten Komma in einer Zeichenkette zu entfernen, können Sie diese regulären Ausdrücke verwenden:

    Muster : ,.*

    Muster : ,(.

    In der folgenden Abbildung können Sie sehen, wie sich die Ergebnisse unterscheiden.

    Regex, um alles vor dem Leerzeichen zu entfernen

    Wenn Sie mit langen Textabschnitten arbeiten, möchten Sie diese manchmal kürzen, indem Sie in allen Zellen denselben Teil der Information entfernen.

    Alles vor dem letzten Leerzeichen entfernen

    Wie im vorangegangenen Beispiel hängt ein regulärer Ausdruck davon ab, was Sie unter einem "Leerzeichen" verstehen.

    Um alles bis zum letzter Platz ist diese Regex ausreichend (Anführungszeichen werden hinzugefügt, damit ein Leerzeichen nach einem Sternchen erkennbar ist).

    Muster : ".* "

    Um etwas vor der letztes Leerzeichen (einschließlich Leerzeichen, Tabulator, Wagenrücklauf und Zeilenumbruch), verwenden Sie diesen regulären Ausdruck.

    Muster : .*\s

    Der Unterschied ist besonders bei mehrzeiligen Zeichenfolgen spürbar.

    Entfernen Sie alles vor dem ersten Leerzeichen

    Um alles bis zum ersten Leerzeichen in einer Zeichenkette zu finden, können Sie diesen regulären Ausdruck verwenden:

    Muster : ^[^ ]* +

    Ab dem Beginn einer Zeichenkette ^ werden null oder mehr Nicht-Leerzeichen [^ ]* gefunden, die unmittelbar von einem oder mehreren Leerzeichen " +" gefolgt werden. Der letzte Teil wird hinzugefügt, um mögliche führende Leerzeichen in den Ergebnissen zu verhindern.

    Um den Text vor dem ersten Leerzeichen in jeder Zeile zu entfernen, wird die Formel im Standardmodus "alle Übereinstimmungen" geschrieben ( Instanz_num ausgelassen):

    =RegExpReplace(A5, "^[^ ]* +", "")

    Um Text vor dem ersten Leerzeichen in der ersten Zeile zu löschen und alle anderen Zeilen intakt zu lassen, wird die Instanz_num wird auf 1 gesetzt:

    =RegExpReplace(A5, "^[^ ]* +", "", 1)

    Regex um alles vor dem Zeichen zu entfernen

    Der einfachste Weg, den gesamten Text vor einem bestimmten Zeichen zu entfernen, ist die Verwendung einer Regex wie dieser:

    Generisches Muster : ^[^char]*char

    In eine menschliche Sprache übersetzt, heißt es: "ab dem Beginn einer durch ^ verankerten Zeichenkette, 0 oder mehr Zeichen außer char [^char]* bis zum ersten Vorkommen von char .

    Um zum Beispiel den gesamten Text vor dem ersten Doppelpunkt zu löschen, verwenden Sie diesen regulären Ausdruck:

    Muster : ^[^:]*:

    Um führende Leerzeichen in den Ergebnissen zu vermeiden, fügen Sie am Ende ein Leerzeichen \s* ein. Dadurch wird alles vor dem ersten Doppelpunkt entfernt und alle Leerzeichen direkt danach abgeschnitten:

    Muster : ^[^:]*:\s*

    =RegExpReplace(A5, "^[^:]*:\s*", "")

    Tipp: Neben regulären Ausdrücken verfügt Excel über eigene Mittel, um Text nach Position oder Übereinstimmung zu entfernen. Wie Sie diese Aufgabe mit eigenen Formeln erledigen können, erfahren Sie unter Wie man in Excel Text vor oder nach einem Zeichen entfernt.

    Regex zum Entfernen von allem außer

    Um alle Zeichen aus einer Zeichenkette zu entfernen, außer denen, die Sie behalten wollen, verwenden Sie negierte Zeichenklassen.

    Um zum Beispiel alle Zeichen außer Kleinbuchstaben und Punkten zu entfernen, lautet die Regex:

    Muster : [^a-z\.]+

    Eigentlich könnten wir hier auf den Quantifizierer + verzichten, da unsere Funktion alle gefundenen Übereinstimmungen ersetzt. Der Quantifizierer macht es nur ein wenig schneller - statt jedes einzelne Zeichen zu behandeln, ersetzen Sie eine Teilzeichenkette.

    =RegExpReplace(A5, "[^a-z\.]+", "")

    Regex zum Entfernen von html-Tags in Excel

    Zunächst einmal ist anzumerken, dass HTML keine reguläre Sprache ist, so dass das Parsen mit regulären Ausdrücken nicht die beste Methode ist. Dennoch können Regexe dabei helfen, Tags aus Ihren Zellen zu entfernen, um Ihren Datensatz sauberer zu machen.

    Da html-Tags immer in spitzen Klammern stehen, können Sie sie mit einem der folgenden Regexe finden.

    Verneinte Klasse:

    Muster : ]*>

    Hier wird eine öffnende spitze Klammer, gefolgt von null oder mehr Vorkommen eines beliebigen Zeichens außer der schließenden spitzen Klammer [^>]* bis zur nächstliegenden schließenden spitzen Klammer abgeglichen.

    Faule Suche:

    Muster :

    Hier wird alles von der ersten öffnenden Klammer bis zur ersten schließenden Klammer abgeglichen. Das Fragezeichen zwingt .* dazu, so wenige Zeichen wie möglich abzugleichen, bis es eine schließende Klammer findet.

    Welches Muster Sie auch immer wählen, das Ergebnis wird absolut gleich sein.

    Um zum Beispiel alle html-Tags aus einer Zeichenfolge in A5 zu entfernen und den Text zu belassen, lautet die Formel:

    =RegExpReplace(A5, "]*>", "")

    Oder Sie können den Lazy Quantifier verwenden, wie im Screenshot gezeigt:

    Diese Lösung funktioniert perfekt für einen einzelnen Text (Zeilen 5 - 9). Bei mehreren Texten (Zeilen 10 - 12) sind die Ergebnisse fragwürdig - Texte aus verschiedenen Tags werden zu einem einzigen zusammengeführt. Ist das nun richtig oder nicht? Ich fürchte, das lässt sich nicht so einfach entscheiden - alles hängt davon ab, was Sie unter dem gewünschten Ergebnis verstehen. In B11 wird beispielsweise das Ergebnis "A1" erwartet, während Sie in B10 vielleicht Folgendes wollen"data1" und "data2" müssen durch ein Leerzeichen getrennt werden.

    Um die html-Tags zu entfernen und die verbleibenden Texte durch Leerzeichen zu trennen, können Sie wie folgt vorgehen:

    1. Ersetzen Sie Tags durch Leerzeichen " ", nicht durch leere Zeichenfolgen:

      =RegExpReplace(A5, "]*>", " ")

    2. Reduzieren Sie mehrere Leerzeichen auf ein einziges Leerzeichen:

      =RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")

    3. Führende und nachgestellte Leerzeichen werden abgeschnitten:

      =TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))

    Das Ergebnis sieht dann etwa so aus:

    Ablebits Regex entfernen Werkzeug

    Wenn Sie die Gelegenheit hatten, unsere Ultimate Suite für Excel zu nutzen, haben Sie wahrscheinlich schon die neuen Regex-Tools entdeckt, die mit der jüngsten Version eingeführt wurden. Das Schöne an diesen .NET-basierten Regex-Funktionen ist, dass sie erstens eine vollwertige Syntax für reguläre Ausdrücke ohne die Einschränkungen von VBA RegExp unterstützen und zweitens keinen VBA-Code in Ihre Arbeitsmappen einfügen müssen, da der gesamte Code integriert wirdvon uns am Backend.

    Ihre Aufgabe ist es, einen regulären Ausdruck zu konstruieren und ihn der Funktion zu übergeben :) Ich zeige Ihnen anhand eines praktischen Beispiels, wie Sie das machen.

    Entfernen von Text in eckigen und runden Klammern mit regex

    In langen Textstrings werden weniger wichtige Informationen oft in [Klammern] und (Klammern) eingeschlossen. Wie entfernt man diese irrelevanten Details, ohne die anderen Daten zu verlieren?

    Tatsächlich haben wir bereits eine ähnliche Regex für das Löschen von HTML-Tags, d.h. Text innerhalb von spitzen Klammern, entwickelt. Natürlich funktionieren die gleichen Methoden auch für eckige und runde Klammern.

    Muster : (\(.*?\))

    Der Trick besteht darin, einen Lazy Quantifier (*?) zu verwenden, um die kürzestmögliche Teilzeichenkette zu finden. Die erste Gruppe (\(.*?\)) passt auf alles von einer öffnenden Klammer bis zur ersten schließenden Klammer. Die zweite Gruppe (\[.*?\]) passt auf alles von einer öffnenden Klammer bis zur ersten schließenden Klammer. Ein senkrechter Strich

    Nachdem wir das Muster bestimmt haben, "füttern" wir unsere Regex-Entfernen-Funktion damit, und zwar folgendermaßen

    1. Auf der Ablebits Daten auf der Registerkarte Text Gruppe, klicken Sie auf Regex-Werkzeuge .

  • Auf der Regex-Werkzeuge wählen Sie Ihre Quellzeichenketten, geben Sie Ihre Regex ein, wählen Sie die entfernen und drücken Sie entfernen .

    Um die Ergebnisse als Formeln und nicht als Werte zu erhalten, wählen Sie die Option Als Formel einfügen Kontrollkästchen.

    Um Text innerhalb von Klammern aus Zeichenfolgen in A2:A5 zu entfernen, konfigurieren wir die Einstellungen wie folgt:

  • Das Ergebnis ist, dass die AblebitsRegexRemove wird in eine neue Spalte neben Ihren ursprünglichen Daten eingefügt.

    Die Funktion kann auch direkt in eine Zelle über den Standard Funktion einfügen Dialogfeld, wo es unter der Kategorie AblebitsUDFs .

    Als AblebitsRegexRemove ist zum Entfernen von Text gedacht und benötigt nur zwei Argumente - die Quellzeichenkette und die Regex. Beide Parameter können direkt in einer Formel definiert oder in Form von Zellverweisen angegeben werden. Bei Bedarf kann diese benutzerdefinierte Funktion zusammen mit allen nativen Funktionen verwendet werden.

    Um beispielsweise zusätzliche Leerzeichen in den resultierenden Zeichenfolgen zu entfernen, können Sie die TRIM-Funktion als Wrapper verwenden:

    =TRIM(AblebitsRegexRemove(A5, $A$2))

    So entfernen Sie Zeichenfolgen in Excel mit regulären Ausdrücken. Ich danke Ihnen für die Lektüre und freue mich darauf, Sie nächste Woche in unserem Blog zu sehen!

    Verfügbare Downloads

    Zeichenketten mit Regex entfernen - Beispiele (.xlsm-Datei)

    Ultimate Suite - Testversion (.exe-Datei)

    Michael Brown ist ein begeisterter Technologie-Enthusiast mit einer Leidenschaft für die Vereinfachung komplexer Prozesse mithilfe von Softwaretools. Mit mehr als einem Jahrzehnt Erfahrung in der Technologiebranche hat er seine Fähigkeiten in Microsoft Excel und Outlook sowie Google Sheets und Docs verfeinert. Michaels Blog widmet sich dem Teilen seines Wissens und seiner Expertise mit anderen und bietet leicht verständliche Tipps und Tutorials zur Verbesserung von Produktivität und Effizienz. Egal, ob Sie ein erfahrener Profi oder ein Anfänger sind, Michaels Blog bietet wertvolle Einblicke und praktische Ratschläge, wie Sie diese wichtigen Softwaretools optimal nutzen können.