am 11-02-2020 01:59 PM - zuletzt bearbeitet am 11-03-2020 06:09 AM von StephV
Dieser Artikel gehört zu unserer Tool Mastery Serie, einer Zusammenstellung von Beiträgen in der Wissensdatenbank mit verschiedenen Arbeitsbeispielen für Designer-Tools. Er befasst sich mit der Nutzung des RegEx-Tools auf unserem Weg, den Umgang mit Alteryx Designer zu erlernen:
Das RegEx-Tool ist eine Art Schweizer Taschenmesser für das Parsen in Alteryx. Sie können es auf vielerlei Arten einsetzen, um Dinge schneller oder effektiver zu erledigen, aber selbst wenn Sie nur die Klinge verwenden, ist es trotzdem noch sehr praktisch. Oft brauchen Sie nicht mehr, aber wenn Sie sich die Zeit nehmen, die anderen Werkzeuge in Ihrem Messer kennenzulernen, werden Sie sehen, dass Sie damit praktisch alles erledigen können.
Vor und nach der Verwendung des RegEx-Tools.
RegEx ist eine Abkürzung für Regular Expressions (reguläre Ausdrücke), die Sie sich wie eine andere Sprache vorstellen können. Sie verwendet Zeichen wie jede andere Sprache, aber in regulären Ausdrücken werden diese Zeichen verwendet, um Übereinstimmungen in Abfolgen von Buchstaben, Zahlen oder Zeichen in einem Text zu finden. In dieser Sprache geht es vor allem darum, Muster zu erkennen.
Menschen sind sehr gut in der Mustererkennung. Sehen Sie sich beispielsweise den folgenden Textblock an:
3345 Michelson Drive, Suite 400, Irvine, CA 92612
12303 Airport Way, Suite 250, Broomfield, CO 80021
Two North Riverside Plaza, Suite 1430, Chicago, IL 60606
Sie würden müheloslos erkennen, dass dies Adressen sind und welcher Teil eine Hausnummer oder ein Stadtname ist. Aber ein Computer würde nur einen Textblock sehen und nicht überprüfen, ob es sich um eine Adresse handelt oder nicht. Mit RegEx können wir nützliche Daten in Texten „erkennen". Lassen Sie uns diesen Text in eine RegEx-Version übersetzen:
3345 | ^/d+ | ^steht für den Zeilenanfang in RegEx, daher ist es sinnvoll, dieses Zeichen in Ihrem Anfangsmuster zu verwenden. Hier verwenden wir das Muster /d, das für „beliebiges numerisches Zeichen“ (0-9) steht. Das + Zeichen bedeutet, dass wir den vorherigen Ausdruck ein- oder mehrmals abgleichen möchten. Da der erste Teil der Adresse eine Hausnummer ist, können wir eine Nummer beliebiger Länge haben. |
Zum Abgleich von Straßennamen müssen wir zulassen, dass unser Ausdruck mehrere Wörter von Zeichen aufnimmt, einschließlich einer beliebigen Anzahl von Leerzeichen, da Straßennamen oft aus mehr als einem Wort bestehen. Dazu können wir beispielsweise nach Allem suchen, das wir nicht erwarten, indem wir [^...] verwenden. Diese Gruppierungsnotation sucht nach „allen Zeichen, die hier nicht aufgelistet sind“. Das Ergebnis ist dann die ein- oder mehrmalige Übereinstimmung mit jedem Zeichen, das keine Nummer ist. | ||
Suite 400 | .* | Der nächste Teil der Adresse ist eine Wohnungs- oder Suitenummer, die nicht immer vorhanden ist, und unter Umständen verschiedene Namenskonventionen haben kann. Um einen flexiblen Ausdruck zu definieren, der mit allem übereinstimmt, was wir hier sehen, verwenden wir . um jedes „beliebige Zeichen“ abzugleichen. Das Symbol * steht dann dafür, dass wir mit einem beliebigen Zeichen keine oder mehrere Übereinstimmungen finden können. |
Irvine | [^/d]+ | Wie bereits erwähnt bedeutet dies "ein beliebiges Symbol, dass keine Nummer ist". |
CA | /u{2} | Zur Abgleichung mit dem Bundesstaat verwenden wir /u, um nach „einem beliebigen Großbuchstaben“ zu suchen. Da wir hier immer eine Sequenz aus zwei Buchstaben erwarten, können wir die Länge der Übereinstimmung angeben, indem wir {...} nach unserem Ausdruck verwenden, oder „Suche nach zwei beliebigen Großbuchstaben“. |
92612 | /d{5}$ | Die Postleitzahl liegt als 5-stellige Zahl vor, daher können wir beispielsweise nach „fünf numerischen Zeichen“ suchen. Anschließend hängen wir ein $ an, um anzugeben, dass wir an dieser Stelle das Ende der aktuellen Zeile erwarten. |
RegEx-Ausdrücke verwenden eine Vielzahl von Symbolen, aber Alteryx hat einen praktischen kleinen „Spickzettel“ direkt im Tool für Sie vorbereitet.
Damit haben Sie alles, was Sie brauchen, um mit RegEx loszulegen, und wie auch in Alteryx werden Sie feststellen, dass Sie einen Ausdruck für ein bestimmtes Muster auf vielerlei Arten erstellen können. Machen Sie sich keine Gedanken um die Details und verbringen Sie etwas Zeit damit, Dinge wie früher durch Ausprobieren zu lernen.
Keine Sorge, ich habe eine normale Ausbildung absolviert.
Ausführlichere Hinweise zu RegEx finden Sie unter Boost-Extended Format String Syntax (in englischer Sprache) sowie in der RegEx-Perl-Syntaxanleitung.
Alteryx hat die RegEx-Funktionen in vier Methoden unterteilt: Übereinstimmung, Parse, Ersetzen und Tokenize. Unsere Hilfedokumentation für diese Methoden ist sehr umfangreich.
Die Methode der Übereinstimmung überprüft lediglich, ob eine Zeichenfolge durch den angegebenen regulären Ausdruck beschrieben werden kann und gibt ein Ergebnis von Wahr oder Falsch zurück. Lassen Sie uns die Ausdruckselemente aus der oben gezeigten Tabelle verwenden, um unsere Adressen abzugleichen. Sie können einen langen Ausdruck erstellen, indem Sie die Ausdrücke zusammenfügen und Leerzeichen /s sowie Kommas , an den richtigen Stellen einfügen.
Die ersten beiden Adressen stimmen mit diesem Ausdruck überein, aber die dritte Adresse weicht vom erwarteten Format ab und liefert einen Fehler. Aufgrund einer unklaren Norm für Gebäude, die einen Namen mit ihrer Adresse gemeinsam haben, wird die Straßennummer ausgeschrieben, und unser regulärer Ausdruck kann diese daher nicht abgleichen.
Der Schlüssel zum Schreiben guter RegEx ist, diese Ausnahmen in Ihren Daten abzusehen und sie innerhalb des Ausdrucks zu berücksichtigen. Um den Wert „two“ in dieser Adresse abzugleichen, lassen Sie uns einen weiteren Ausdruck verwenden, der nur dann ausgewertet wird, wenn dieser keine Übereinstimmung ergibt. Die meisten Adressen beginnen mit Nummern, aber falls nicht, sucht dieser Ausdruck stattdessen nach einem Wort. So sieht unser Ausdruck aus:
Diese Logik ist einfacher als sie aussieht und verwendet lediglich zwei zusätzliche RegEx-Symbole. Das Pipe-Symbol I steht für „oder“. Beispiel: a|b überprüft zuerst, ob a übereinstimmt, und falls nicht, wird nach b gesucht. Das zweite Symbol ist (?:...), auch bekannt als unmarkierte Gruppe. Damit können wir diese Segmente für die oder-Operation gruppieren.
Unsere erste Gruppe (?:^/d+) funktioniert also wie zuvor, und falls ein Fehler auftritt, versucht der Ausdruck, eine Übereinstimmung mit der zweiten Gruppe (?:^/w+) zu finden. Auf diese Weise finden wir die ausgeschriebene Version unserer Adresse ohne Probleme.
Mehr zur Funktion der Übereinstimmung:
Bonus: RegEx können auf vielerlei Arten strukturiert werden. Schreiben Sie uns in den Kommentaren eine bessere Alternative für (?:^/d+)|(?:^/w+). Warum ist Ihre Alternative besser?
Übereinstimmungen sind hilfreich für Überprüfungen, aber die Parse-Methode ist die eigentliche Stärke von RegEx und ermöglicht das Extrahieren nützlicher Informationen aus einem Textblock. Das RegEx-Tool erleichtert uns diese Aufgaben. Wir setzen lediglich Klammern (...) um die Elemente herum, die wir extrahieren möchten. Damit erstellen wir markierte Gruppen, das Gegenstück zu unseren unmarkierten Gruppen weiter oben (?:...).
Wenn Sie die Klammern eingeben, werden die Gruppen in einem Fenster mit Ausgangsfeldern im Stil des Auswählen-Tools angezeigt, und Sie können Ihre Felder umbenennen und die Datentypen ändern.
Mehr zur Parse-Funktion :
Wie Sie gesehen haben, ist die Parse-Methode lediglich eine Erweiterung der Übereinstimmung, die uns erlaubt, Elemente vom Text zu extrahieren und sie ordentlich in einer neuen Spalte anzuordnen. Aber was passiert, wenn wir dieses Konzept erweitern und uns fragen:, „Wie könnte ich Dinge wieder einfügen“? An dieser Stelle kommt die Ersetzen-Methode ins Spiel.
Mit der Ersetzen-Methode können wir Komponenten unserer Zeichenfolge parsen, ersetzen und sogar neu anordnen. Dazu erstellen wir markierte Gruppen, um dem RegEx-Tool in einer allgemein verständlichen Sprache mitzuteilen, was es ersetzen soll und wo ...
Das schicke Faultier hat völlig recht. Wir können Dollarzeichen $ zusammen mit Ziffern verwenden, um die einzelnen markierten Gruppen exakt zu definieren. $1, $2 und $3 beziehen sich beispielsweise auf die erste, zweite bzw. dritte markierte Gruppe. Wenn wir also alle Städte und Bundesstaaten aus unserer Adressenliste auslesen möchten, können wir den Ausdruck $4, $5 verwenden.
Beachten Sie, dass wir hier unser eigenes Komma und ein Leerzeichen einfügen konnten, indem wir sie in das Textfeld eingegeben haben. Die Ersetzen-Methode ist sehr flexibel und ist auch im Formel-Tool über die Funktion Regex_Replace verfügbar.
Mehr zur Ersetzen-Methode:
RegEx ist praktisch, wenn wir Daten in einer schicken, geordneten Liste erhalten, aber was passiert, wenn die Daten formlos aus einem API-Aufruf oder einer Datenbank als einzelner Textblock ausgekippt werden?
3345 Michelson Drive, Suite 400, Irvine, CA 92612,12303 Airport Way, Suite 250, Broomfield, CO 80021,Two North Riverside Plaza, Suite 1430, Chicago, IL 60606
Das ist nicht besonders hilfreich – eine kommagetrennte Liste, aber wir können nicht ohne Weiteres erkennen, wo eine Adresse endet und die nächste beginnt. An dieser Stelle brauchen wir die Tokenize-Methode, mit der wir den Textblock in Spalten oder Zeilen aufteilen können, ähnlich wie mit dem Tool Text in Spalten aufteilen. RegEx Tokenize hat jedoch zwei wichtige Eigenheiten:
Das mag zunächst verwirrend klingen, ermöglicht jedoch eine flexible Auswahl bei der Aufteilung Ihrer Daten. Als Demonstration werden wir unseren Textblock mit Adressen zunächst mit dem Komma als Trennzeichen in mehrere Zeilen aufteilen.
Wir müssen nach den Elementen suchen, die wir zuordnen möchten, daher verwenden wir den Ausdruck (.+?)(?:,|$). Schauen wir uns das genauer an:
Uff, das ist viel zu verdauen. Nutzen Sie diese Gelegenheit, um sich zu strecken, einen Spaziergang zu machen oder zu meditieren.
Mit dem Tool Text in Spalten aufteilen können Sie einen Text zwar viel einfacher nach Kommas aufteilen, aber die Flexibilität der Tokenize-Funktion zeigt sich bei anderen, hilfreichen Aufgaben. Wir können den Block mit Adressdaten beispielsweise in die ursprünglichen drei Adressen aufteilen.
In diesem Fall verwenden wir unseren letzten übereinstimmenden Ausdruck für die Postleitzahl /d{5}, um das Ende der einzelnen Übereinstimmungen zu markieren. Wir wissen also bereits, dass jede Zeile entweder mit einem Komma oder einem Zeilenende endet, und können den Block (?:,|$) verwenden, um diese Segmente erfolgreich aufzuteilen. Im vorherigen Beispiel habe ich das ?-Symbol vorgestellt, um Null oder eine Übereinstimmung zu finden und diesen Teil zu ersetzen, damit wir nach der Übereinstimmung mit der markierten Gruppe nach einem „optionalen Komma“ aufteilen können.
Mehr zur Tokenize-Funktion :
Bonus: Der Ausdruck ,? funktioniert im vorherigen Fall nicht und teilt den Text allein nach Komma auf - (.+?),? anstatt nach (.+?)(?:,|$). Warum?
Schreiben Sie Ihre Erklärung unten in die Kommentare und gewinnen Sie jede Menge Internetpunkte.
Nun sollten Sie über Expertenkenntnisse für die Nutzung des RegEx-Tools verfügen! Falls Sie einen Anwendungsfall kennen, den wir ausgelassen haben, können Sie gerne nachstehend einen Kommentar hinterlassen!
Sehen Sie sich schon als Tool-Meister? Schreiben Sie uns an Stephanie.jansen@alteryx.com, wenn Sie Ihre kreativen Tool-Anwendungsbeispiele in einem Artikel der Tool Mastery Serie vorstellen möchten.
Haben Sie noch Fragen? Die deutsche Community ist hier, um sie im Forum zu beantworten.
Wenn Sie alle Designer-Tools beherrschen möchten, abonnieren Sie unsere E-Mail-Benachrichtigungen.
*Dieser Beitrag wurde von @AlexKo geschrieben.