\1\1
La funzione JSL REGEX Regex ha un argomento di formato che per impostazione predefinita è "\0". \0 è il riferimento posteriore a tutto il testo corrispondente.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "\w{6,6}", "\0"); // look for exactly 6 word characters
"saltato"
Altri riferimenti all'indietro sono creati da parentesi.
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");
"questa parte: sui pigri
ha questo: finita
e questo: pigro
parole di quattro lettere"
Il primo esempio di sei lettere ha funzionato perché non c'erano parole più lunghe di sei lettere. L'esempio della parola di quattro lettere è più complicato; sta usando \b per abbinare i limiti delle parole. Senza il test di confine, veloce sembrerebbe una parola di quattro lettere. L'argomento formato ha prodotto tutte e quattro le righe di testo utilizzando i riferimenti indietro \0, \1 e \2. \1 è il primo gruppo tra parentesi e \2 il secondo. \0 corrisponde ancora all'intero testo. ( \!n è un carattere di nuova riga. È tutto eseguito insieme perché tutti gli spazi diventano parte dell'output. )
Regex fa distinzione tra maiuscole e minuscole per impostazione predefinita. Questo esempio non riesce a trovare corrispondenze e restituisce un valore mancante
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG");
.
C'è un'opzione per questo.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG", "\0", IGNORECASE);
"cane"
E ci sono specifiche per cambiare maiuscole e minuscole nella stringa di formato.
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w)(\w*)\b", "\U\1\E\L\2\E", IGNORECASE, GLOBALREPLACE);
"La volpe marrone veloce saltò sul cane pigro"
La regex ha inserito il caso irregolare nelle maiuscole iniziali. La stringa di formato contiene \U per iniziare la maiuscola, \L per iniziare la minuscola e \E per terminare il cambio di maiuscole/minuscole.
grammatica per stringhe di sostituzione regex (simile a Perl)
- \L - inizia a ridurre in maiuscolo l'output fino a \E
- \U - inizia a scrivere in maiuscolo l'output fino a \E
- \E - modifiche alla fine delle maiuscole e delle virgolette
- \l - (lettera minuscola L) - minuscola il carattere successivo
- \u - maiuscolo il carattere successivo
- \0 ... \999 - sostituisce una delle espressioni corrispondenti dal modello
- \e - fine di un numero se seguono più cifre: \7\e123 indica l'espressione 7 seguita da 123 (estensione JMP)
- \\ - una singola barra rovesciata
Trovato un bug: questo non funziona attualmente, ma lo farà nella manutenzione 12.2 (loop a causa di una cattiva interazione con IGNORECASE e GLOBALREPLACE e la corrispondenza di lunghezza zero alla fine della stringa)
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", IGNORECASE, GLOBALREPLACE);
Poiché non ci sono caratteri specifici per maiuscole e minuscole nella stringa di ricerca, funzionerà:
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", GLOBALREPLACE);
"La volpe marrone veloce saltò sul cane pigro"
L'uso di \w+ invece di \w* evita anche il problema insistendo che le parole abbiano almeno un carattere.
Il Tennessee Waltz è sul lato anteriore.
Aggiornamento 4 febbraio 2017: formattazione (e immagine) riparata per la nuova community.
@gianpaolo :
La tua osservazione è totalmente corretta. È stato un errore di battitura e una svista da parte mia. Lo script che hai postato è corretto
grazie mille per l'aiuto,
penso solo che lo script funzioni se uso "Colnames" invece "ColsList" nel FOR Cicle
Cancella Globali ();
Pulisci il registro ();
tt = Tabella dei dati correnti ();
ColNames = dt << Ottieni nomi di colonna ( "Corda" );
Per ( io = 1 , io <= N articoli ( ColNames ), i++,
Se (! Manca ( Regex ( Car ( ColNames[i] ), "^[0-9]" ) ),
Col = Colonna ( dt, io ); // dove dt è la tua tabella dati
ColName = Col << Ottieni nome ;
NuovoNome = Concat ( "*" , NomeCol );
Col << Imposta nome ( Nuovo nome );
)
);
sono un principiante nello scripting jmp ... perdonami se sbaglio
Potrebbe essere necessario modificare la regex in
<SPAN class="token string">"^[0-9]"</SPAN>
per costringerlo a trovare il carattere all'inizio della stringa. Altrimenti un nome come Column7 corrisponderebbe.
@gianpaolo ,
Ecco un modo per affrontare .Il mio suggerimento è di pubblicare tali domande in "Discussioni" e fornire un collegamento al blog. La community sarà in grado di rispondere alla tua domanda più velocemente:
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);
);
);
Viene fornito uno screenshot della tabella dati (dt) che ho creato per eseguire l'esempio
Ciao Craige_Hales,
ho trovato la funzione 'regex' molto interessante per applicare i miei lavori.
Ho la necessità di modificare il mio nome Comuns per il mio script in dettaglio vorrei inserire un carattere quando il nome della mia colonna inizia con un numero.
es. se è: "00001 DATA no 1"
quindi sarà: "*00001 DATA no 1" (in questo caso ho aggiunto ' * ')
se è: "DATI n. 1"
allora sarà: "DATA no 1" (in questo caso nessuna modifica)
è possibile utilizzare regex? Mi potete aiutare?
molte grazie
ciao Gianpaolo