Estrai il numero adiacente a StringCiao, qualcuno può aiutarmi a estrarre i numeri adiacenti alle stringhe?
Di seguito è mostrata la colonna1 e mi aspetto di estrarre i numeri adiacenti a "HFA" (colonna2).
Ho provato il seguente JSL, ma non sono riuscito a ottenere la colonna2 prevista
Num( Regex( :Colonna 1, "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )
| colonna1 | colonna2 |
| 400HFA è 300 | 400 |
| isa300HFA400 | 400 |
Grazie per aver considerato la domanda.
Automazione e scriptingRi: estrarre il numero adiacente alla stringaCIAO @jthi
Grazie mille per la tua soluzione alternativa al problema e anche per il link su regex.
Ri: estrarre il numero adiacente alla stringaCIAO @Craige_Hales ,
Grazie mille per aver arricchito la discussione.
In effetti ho appreso per la prima volta della regex di JMP dal tuo vecchio articolo!
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008
Ri: estrarre il numero adiacente alla stringaUn buon posto per esercitarsi e testare regex è https://regex101.com/ .

Quei commenti con i caratteri di escape JMP rimossi sono stati molto utili, devo iniziare ad aggiungerli quando scrivo pattern regex più complicati ( Problema Regex con caratteri sfuggiti )
Ri: estrarre il numero adiacente alla stringaGrazie @AprioriFish3134 per aver evidenziato il problema originale (no \2), e @ngambles per una buona soluzione.
Se hai bisogno di ancora più livelli di parentesi nidificate, o parentesi sequenziali nel tuo esempio, basta contare le parentesi aperte da sinistra a destra per scoprire il numero di riferimento posteriore. Il backreference per le alternative inutilizzate è una stringa vuota.
Regex( "abac", "(((a)|(b)|(c))(c))+", "1=\1 2=\2 3=\3 4=\4 5=\5 6=\6" )
"1=ma 2=la 3=la 4= 5= 6=do"
Una cosa che potrebbe non essere ovvia: il riferimento all'indietro può essere utilizzato anche nel pattern. Questo potrebbe essere utile per assicurarsi che una virgoletta o un apostrofo iniziale e finale siano usati in modo coerente:
Write( Regex(
"before 'a \!"b\!" c' after", // before 'a "b" c' after
"(\!"|')(.*?)\1", // ("|')(.*?)\1
"\2"
) )
una "b" c
(L'escape \!" inserisce una virgoletta all'interno delle stringhe; il commento mostra il testo della stringa.) In questo esempio, \1 gruppo può corrispondere a " o ' e \2 corrisponde a tutto il testo fino a un'altra occorrenza di \1.
Usa alcuni commenti se scrivi regex in questo modo! Il prossimo manutentore lo apprezzerà.
Ri: estrarre il numero adiacente alla stringaSe per qualche motivo è necessario affrontare il problema @ngambles menzionato, un modo abbastanza semplice sarebbe usare Regex Match invece di Regex
Names Default To Here(1);
a = "400HFA isa300";
b = "isa300 HFA400";
c = "400HFA300";
d = "400HF300";
rgx_pattern = "(\d*)(?:HFA)(\d*)";
show(Regex Match(a, rgx_pattern));
show(Regex Match(b, rgx_pattern));
show(Regex Match(c, rgx_pattern));
show(Regex Match(d, rgx_pattern));
Regex Match richiederà tuttavia alcuni controlli aggiuntivi poiché restituisce un elenco di gruppi catturati.
Ri: estrarre il numero adiacente alla stringaCiao Ngambels,
Grazie mille per il tuo aiuto. Ha risolto il problema.
Ho provato
"(\d*)HFA(\d*)"
ma a quanto pare mi sono perso (non sapevo di poter e dover usare sia \1 che \2)
"\1\2"
Ho imparato cose nuove da te e attraverso questa discussione.
Ancora una volta, grazie mille!
Ri: estrarre il numero adiacente alla stringaDato il piccolo insieme di esempi, funziona la seguente formula:
Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )
Questa soluzione incontrerà problemi se hai istanze come "400HFA300".Restituirà 400300.