
Eine Reihe von JMP-Zeichenfunktionen wurden in a angezeigt vorherigen Post : Länge, Teilstr, enthält usw. Sie eignen sich hervorragend für einfache Dinge und für Sie könnte Machen Sie harte Dinge mit ihnen, wenn Sie möchten. Aber Regex könnte besser sein.
Regex, Kurzform 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 zunächst einmal Vanilla „regex“ an. Es ist das, was Sie wollen, insbesondere 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 zahlreiche Tutorials zu regulären Ausdrücken. Der reguläre Ausdruck von JMP Suchmuster ähneln den regulären Ausdrücken von Perl.
Der searchPattern ist den regulären Ausdruck und beschreibt den zu findenden Text. Der replaceTemplate beschreibt, wie der übereinstimmende Text ersetzt wird und kann Teile des übereinstimmenden Textes verwenden in der Vorlage. In den folgenden Beispielen wird aus Gründen der Übersichtlichkeit eine Literalzeichenfolge (in Anführungszeichen) für das erste Argument verwendet, aber eine Variable, die das enthält Quellentext würde fast immer mehr Sinn ergeben.
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 Verknüpfung mit dem Bindestrich gibt einen Bereich an. Sie können [a-zA-Z] verwenden, um einen Satz aller ASCII-Zeichen in Groß- und Kleinschreibung 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 Tab, Return, Newline, vertikales Tab und Formfeed |
| \S |
[^ \t\v\f] |
kein Leerzeichen |
Alle oben genannten Tastenkombinationen entsprechen einem einzelnen Zeichen . Sie können das hinzufügen Sternchen
\S*
passend zu einer Reihe von Null oder mehr Leerzeichen. Oder Sie können eine hinzufügen Plus
\D+
passend zu einer Reihe von 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 sich so viel Text wie möglich schnappen und sich später bei Bedarf zurückziehen. Sie können durch das Hinzufügen eines Fragezeichens zurückhaltend gemacht werden. Im Allgemeinen ist Gier das gewünschte Verhalten, aber nicht immer.
Klammern, Rückverweise und replaceTemplate
Ein großer Teil der Leistungsfähigkeit von Regex ergibt sich aus der Interaktion zwischen Suchmuster und das replaceTemplate . Die Interaktion wird durch die Verwendung von Rückreferenzen erstellt, dargestellt als \0, \1, \2, ... Der Standardwert von replaceTemplate ist „\0“. Der Rückverweis \0 ist der gesamte gefundene Text. Klammern werden in regulären Ausdrücken verwendet, um Teile eines Musters zu gruppieren und so 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)
„Katzenhund *** *** Katzenhund“
Der vertikale Balken trennt Alternativen und hat eine sehr niedrige Priorität. Im zweiten Beispiel werden Klammern verwendet, um t oder d zusammenzufassen. Der replaceTemplate ist nur konstanter Text, ***. Aber jede offene 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)
„cat dog t d cat dog“
GLOBALREPLACE bewirkt, dass die Regex alle Übereinstimmungen findet und ersetzt; Das Muster stimmt entweder mit catog oder cadog überein. 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 \1-Wert hinzu und ersetzt dann jeden übereinstimmenden Catog oder Cadog durch die Vorlage.
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 Beispiel für Nachname und Vorname unter Verwendung von Regex.
Column formula using regex()Column formula using regex()Column formula using regex()Column formula using regex() Spaltenformel mit regex()
In diesem Beispiel werden die Anker ^ und $ verwendet (grün unterstrichen). ^ entspricht dem Anfang der Zeichenfolge und $ entspricht dem Ende der Zeichenfolge. \w* entspricht null oder mehr Wortzeichen.Dieses Beispiel ist möglicherweise zu einfach. Es werden keine Namen mit Sonderzeichen oder Leerzeichen verarbeitet. Sie können es so überarbeiten, dass es mithilfe von Rückverweisen durch Kommas getrennt wird: Regex(name, "([^,]*)", "\1") Und Regex(name, "\s*([^,]*)$", "\1") womöglich.„([^,]*)“ 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. Im „([^,]*)“ Fall \1 und \0 sind gleich. Aber in "\s*([^,]*)$", \0 kann führende Leerzeichen enthalten, 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 ausführlich beschrieben werden (suchen Sie nach „regex“). Und das Beispiel von Alice und Jerry im Skriptindex ist auch ziemlich gut, wenn Sie darüber nachdenken, wie die Rückverweise verwendet werden können.
Als nächstes: Mustervergleichsfunktionen.
Update 29.01.2017: Formatierung für neue Community korrigiert.