\1\1
Die JSL REGEX-Funktion Regex hat ein Formatargument, das standardmäßig "\0" ist. \0 ist der Rückverweis auf den gesamten übereinstimmenden Text.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "\w{6,6}", "\0"); // look for exactly 6 word characters
"gesprungen"
Andere Rückverweise werden durch Klammern erzeugt.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "(\b\w{4,4}\b).*(\b\w{4,4}\b)",
"this part: \0\!nhas this: \1\!nand this: \2\!nfour letter words");
"dieser Teil: über die Faulen
hat dies: vorbei
und das: faul
Wörter mit vier Buchstaben“
Das erste Beispiel mit sechs Buchstaben funktionierte, weil es keine Wörter gab, die länger als sechs Buchstaben waren. Das Beispiel mit vier Buchstaben ist komplizierter; es verwendet \b, um Wortgrenzen abzugleichen. Ohne den Grenztest schnell scheint ein Wort mit vier Buchstaben zu sein. Das Formatargument erzeugte alle vier Textzeilen unter Verwendung von Rückverweisen \0, \1 und \2. \1 ist die erste eingeklammerte Gruppe und \2 die zweite. \0 ist immer noch der gesamte Text abgeglichen. ( \!n ist ein New Line-Zeichen. Es läuft alles zusammen, weil alle Leerzeichen Teil der Ausgabe werden. )
Bei Regex wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden. Dieses Beispiel stimmt nicht überein und gibt einen fehlenden Wert zurück
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG");
.
Dafür gibt es eine Option.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG", "\0", IGNORECASE);
"Hund"
Und es gibt Spezifikationen für die Änderung der Groß-/Kleinschreibung im Formatstring.
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w)(\w*)\b", "\U\1\E\L\2\E", IGNORECASE, GLOBALREPLACE);
"Der schnelle braune Fuchs sprang über den faulen Hund"
Die Regex hat die unregelmäßige Groß-/Kleinschreibung in Anfangsbuchstaben geschrieben. Die Formatzeichenfolge enthält \U, um mit Großbuchstaben zu beginnen, \L, um mit Kleinbuchstaben zu beginnen, und \E, um die Änderung der Groß-/Kleinschreibung zu beenden.
Grammatik für Regex-Ersatzstrings (ähnlich Perl)
- \L - beginnen Sie mit der Kleinschreibung der Ausgabe bis \E
- \U - beginnt die Ausgabe in Großbuchstaben bis \E
- \E - Ende der Gehäuse- und Zitiermodifikationen
- \l - (Kleinbuchstabe L) - Kleinbuchstabe des nächsten Zeichens
- \u - das nächste Zeichen in Großbuchstaben
- \0 ... \999 - Ersetzen Sie einen der übereinstimmenden Ausdrücke aus dem Muster
- \e - Ende einer Zahl, wenn weitere Ziffern folgen: \7\e123 bedeutet Ausdruck 7 gefolgt von 123 (JMP-Erweiterung)
- \\ - ein einzelner umgekehrter Schrägstrich
Fehler gefunden: Dies funktioniert derzeit nicht, wird aber in der 12.2-Wartung (Schleifen wegen einer schlechten Interaktion mit IGNORECASE und GLOBALREPLACE und dem Match der Länge Null am Ende der Zeichenfolge)
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", IGNORECASE, GLOBALREPLACE);
Da es keine fallspezifischen Zeichen in der Suchzeichenfolge gibt, funktioniert dies:
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", GLOBALREPLACE);
"Der schnelle braune Fuchs sprang über den faulen Hund"
Die Verwendung von \w+ anstelle von \w* vermeidet das Problem auch, indem darauf bestanden wird, dass Wörter mindestens ein Zeichen haben.
Der Tennessee Waltz ist auf der Vorderseite.
Update 4. Feb. 2017: Formatierung (und Bild) für neue Community repariert.
vielen dank für hilfe,
Ich denke nur, dass das Skript funktioniert, wenn ich "Colnames" anstelle von "ColsList" im FOR Cicle verwende
Global löschen ();
Protokoll löschen ();
dt = Aktuelle Datentabelle ();
Spaltennamen = dt << Spaltennamen erhalten ( "Zeichenkette" );
Für ( ich = 1 , ich <= N Artikel (Spaltennamen), i++,
Wenn ( ! Wird vermisst ( Regex ( Verkohlen (Spaltennamen[i]), "^[0-9]" ) ),
Spalte = Spalte ( dt, i ); // wobei dt Ihre Datentabelle ist
Spaltenname = Spalte << Namen erhalten ;
NeuerName = Konkat ( "*" , Spaltenname );
Spalte << Name einsetzen ( Neuer Name );
)
);
Ich bin Anfänger im JMP-Scripting ... verzeihen Sie mir, wenn ich falsch liege
Möglicherweise müssen Sie die Regex ändern in
<SPAN class="token string">"^[0-9]"</SPAN>
um es zu zwingen, das Zeichen am Anfang der Zeichenfolge zu finden. Andernfalls würde ein Name wie Column7 passen.
@gianpaolo ,
Hier ist eine Möglichkeit, dies anzugehen. Mein Vorschlag ist, solche Fragen in "Diskussionen" zu posten - und einen Link zum Blog bereitzustellen. Die Community kann Ihre Frage schneller beantworten :
Clear Globals(); Clear Log();
dt = Current Data Table();
ColNames = dt << Get Column Names("String");
for( i = 1 , i <= N Items(ColsList) , i++,
If(!IsMissing(Regex(Char(ColsList[i]),"[0-9]")),
Col = Column(dt,i); // where dt is your data table
ColName = Col << Get Name;
NewName = Concat("*",ColName);
Col << Set Name(NewName);
);
);
Bereitgestellt wird ein Screenshot der Datentabelle (dt), die ich zum Ausführen des Beispiels erstellt habe
Hallo Craige_Hales,
Ich fand die 'Regex'-Funktion sehr interessant, um meine Arbeiten anzuwenden.
Ich muss meinen Comuns-Namen für mein Skript im Detail ändern. Ich möchte ein Zeichen einfügen, wenn mein Spaltenname mit einer Zahl beginnt.
zB wenn ist: "00001 DATA no 1"
dann wird es sein: "*00001 DATA no 1" (in diesem Fall habe ich ' * ' hinzugefügt)
if is: "DATEN Nr. 1"
dann steht: "DATA no 1" (in diesem Fall keine Änderungen)
ist es möglich, Regex zu verwenden? kannst du mir helfen?
vielen Dank
ciao Gianpaolo