
Eine Reihe von JMP-Zeichenfunktionen erschien in a vorherigen Post : Länge, Substr, Enthält usw. Sie sind großartig für einfache Dinge, und Sie könnte mache harte Sachen mit ihnen, wenn du wolltest. Aber Regex könnte besser sein.
Regex, kurz für Regulären Ausdruck , ist eine leistungsstarke JSL-Funktion zum Bearbeiten von Text.
result = regex( sourceText, searchPattern, replaceTemplate, options );
(Es gibt zwei weitere Funktionen in JSL mit Regex im Namen; schauen Sie sich jetzt einfach Vanilla "Regex" an. Es ist das, was Sie wollen, besonders wenn Sie es in einer Spaltenformel verwenden.)
Dies ist eine sehr unvollständige Einführung in reguläre Ausdrücke (aber eine einigermaßen vollständige Beschreibung der Regex-Funktion von JMP). Im Internet finden Sie viele Tutorials zu regulären Ausdrücken; Regulärer Ausdruck von JMP Suchmuster ähneln den regulären Ausdrücken von Perl.
Das Suchmuster ist den regulären Ausdruck und beschreibt den zu suchenden Text. Das Vorlage ersetzen beschreibt, wie der übereinstimmende Text ersetzt wird und kann Bits des abgeglichenen Textes verwenden in der Vorlage. Die folgenden Beispiele verwenden aus Gründen der Übersichtlichkeit eine Literalzeichenfolge (in Anführungszeichen) für das erste Argument, aber eine Variable, die die enthält Quellentext wäre fast immer sinnvoller.
regex( "123 456 789", "[0-9]*")
"123"
Dieses Beispiel hat zwei Argumente, Quellentext und Suchmuster . Das Suchmuster verwendet eckige Klammern, um eine Reihe von Zeichen zu erstellen. Die Bindestrich-Verknüpfung gibt einen Bereich an. Sie könnten [a-zA-Z] verwenden, um einen Satz aller ASCII-Zeichen in Groß- und Kleinbuchstaben zu erstellen. Das Sternchen (*) bedeutet „das vorherige Muster null oder mehrmals wiederholen“. \d ist eine Abkürzung für die Menge aller Ziffern.
regex( "123 456 789", "\d*")
"123"
Ein Zeichensatz wie [0123456789] kann negiert werden, indem man ihn mit einem Hut beginnt: [^0123456789] entspricht jedem Zeichen, das keine Ziffer ist. Einige der Abkürzungen wie \d können als Zeichensatz dargestellt werden:
| \w |
[a-zA-Z0-9_] |
Wortzeichen |
| \W |
[^a-zA-Z0-9_] |
keine Wortzeichen |
| \d |
[0-9] |
Ziffern |
| \D |
[^0-9] |
keine Ziffern |
| \s |
[\t\v\f] |
Leerzeichen umfassen Tabulatoren, Zeilenumbrüche, Zeilenumbrüche, vertikale Tabulatoren und Seitenvorschübe |
| \S |
[^\t\v\f] |
nicht Leerzeichen |
Alle obigen Verknüpfungen entsprechen einem einzelnen Zeichen . Sie können die hinzufügen Sternchen
\s*
zu einer Reihe von passen null oder mehr Leerzeichen. Oder Sie können eine hinzufügen Plus
\D+
zu einer Reihe von passen ein oder mehr nichtstellige Zeichen. Oder Sie können eine hinzufügen Fragezeichen
\w?
passen null oder eins Wortzeichen.
Sternchen, Pluszeichen und Fragezeichen sind Wiederholungsoperatoren, und das sind sie auch gierig . Gierig bedeutet, dass sie so viel Text wie möglich aufnehmen und sich später bei Bedarf zurückziehen. Sie können widerstrebend gemacht werden, indem Sie ein Fragezeichen hinzufügen. Im Allgemeinen ist gierig das gewünschte Verhalten, aber nicht immer.
Klammern, Rückverweise und Vorlage ersetzen
Ein Großteil der Leistung von Regex kommt aus der Interaktion zwischen den Suchmuster und die Vorlage ersetzen . Die Interaktion wird durch die Verwendung von Rückverweisen erstellt, die als \0, \1, \2, ... dargestellt werden. Der Standardwert von replaceTemplate ist "\0". Die Rückreferenz \0 ist der gesamte übereinstimmende Text. Klammern werden in regulären Ausdrücken verwendet, um Bits eines Musters zu gruppieren, um größere Muster zu bilden. Zum Beispiel
regex( "cat dog catog cadog cat dog", "cat|dog", "***", GLOBALREPLACE)
"*** *** *** og ca *** *** ***"
regex( "cat dog catog cadog cat dog", "ca(t|d)og", "***", GLOBALREPLACE)
"Katze Hund *** *** Katze Hund"
Der vertikale Balken trennt Alternativen und hat einen sehr geringen Vorrang; Das zweite Beispiel verwendet Klammern, um das t oder d zusammen zu gruppieren. Das Vorlage ersetzen ist nur konstanter Text, ***. Aber jede öffnende Klammer beginnt einen neuen Rückverweis, und die Rückverweise können in der Vorlage verwendet werden:
regex( "cat dog catog cadog cat dog", "ca(t|d)og", " \1 ", GLOBALREPLACE)
"katze hund t d katze hund"
GLOBALREPLACE bewirkt, dass die Regex alle Übereinstimmungen findet und ersetzt; das Muster entspricht entweder catog oder cadog. Die Rückreferenz ist entweder t oder d, da dies der Teil des Musters innerhalb der Klammern ist. Die Vorlage fügt einige Leerzeichen um den Wert \1 hinzu, und die Vorlage wird dann für jeden übereinstimmenden Catog oder Cadog ersetzt.
Es können mehrere Klammerpaare verwendet werden, sowohl verschachtelt als auch nacheinander. Zählen Sie einfach die offenen Klammern, um die hintere Referenznummer zu finden.
Datentabellenformel
Hier ist das Nachname, Vorname-Beispiel mit Regex.
Column formula using regex() Spaltenformel mit Regex()
Dieses Beispiel verwendet die Anker ^ und $ (grün unterstrichen). ^ entspricht dem Anfang der Zeichenfolge und $ entspricht dem Ende der Zeichenfolge. \w* stimmt mit null oder mehr Wortzeichen überein.Dieses Beispiel ist vielleicht zu einfach; Namen mit Sonderzeichen oder Leerzeichen werden nicht behandelt. Sie können es so überarbeiten, dass es mithilfe von Rückverweisen durch Kommas getrennt wird: Regex(Name, "([^,]*)", "\1") und Regex(Name, "\s*([^,]*)$", "\1") vielleicht."([^,]*)" bedeutet null oder mehr Zeichen, die keine Kommas sind, und "\s*([^,]*)$" bedeutet, null oder mehr Leerzeichen zu überspringen, alle Nichtkommas beizubehalten und am Ende zu stehen. In dem "([^,]*)" Fall \1 und \0 sind gleich. Aber in "\s*([^,]*)$", \0 kann führende Leerzeichen haben, die \1 nicht hat, weil \s* außerhalb der Klammern für \1 liegt.
Es gibt noch viel mehr zu regulären Ausdrücken, die an anderer Stelle im Web gut beschrieben sind (suchen Sie nach Regex). Und das Alice-und-Jerry-Beispiel im Skriptindex ist auch ziemlich gut, wenn Sie rätseln, wie die Rückverweise verwendet werden können.
Weiter: Mustererkennungsfunktionen.
Update 29.01.2017: Formatierung für neue Community korrigiert.