Continua a chiedere informazioni sulla segmentazione RegexHo fatto un errore. Scrivere un codice come questo non ti dà il risultato giusto.
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");Necessità di ottenere:
[{op},{q}]Quindi come scrivere JSL. Grazie mille!
Re: Continua a chiedere informazioni sulla segmentazione RegexSe i dati sono json o xml, dovresti usare il parser json/xml di JMP. Non è facile scrivere un parser per queste strutture nidificate e la regex da sola non è sufficiente. Importare xml/json in una tabella e quindi trovare la riga e la colonna è un'ottima scelta.
Se i dati devono essere gestiti in un altro modo, puoi farlo solo con un semplice ciclo JSL e un sacco di test regex, qualcosa del genere:
txt = loadtextfile(...);
ok=1;
while( ok,
... try various regex that remove a bit of data from txt ... set ok to 0 if nothing works.
)
Funziona per file di piccole dimensioni e può essere facilmente mantenuto. Ma un file di grandi dimensioni con molti bit di dati sarà troppo lento perché la rimozione di un po' di dati da una stringa txt di grandi dimensioni copia molti dati, per ogni rimozione. (è un problema n^2: raddoppiare la dimensione del file 4X il tempo di esecuzione.)
Per file di grandi dimensioni, è meglio scrivere una singola corrispondenza di pattern che non modifichi la stringa di input. Puoi utilizzare espressioni regolari o pattern all'interno di un pattern patRepeat() che corrisponde all'intero file e utilizzerai patTest(... ;1) per eseguire alcuni JSL all'interno della corrispondenza che salva i risultati analizzati in una matrice o elenco JSL o array associativo. Prima che JMP avesse un parser json integrato, @Xan Gregg e ne ho scritti alcuni JSL per analizzare i file json . È ancora un ottimo esempio, ma il parser integrato di JMP è migliore.
Ecco alcuni altri post che hanno JSL che analizza un file utilizzando patMatch(... patRepeat( pattern ) ... ) .
https://community.jmp.com/t5/Uncharted/The-Other-Kind-of-Model/ba-p/231703 analisi di un file di dati per un modello 3D
https://community.jmp.com/t5/Uncharted/Web-Logs/ba-p/29389 analisi di un file di registro Apache
https://community.jmp.com/t5/Uncharted/WordNet/ba-p/28984 analisi del file wordnet
https://community.jmp.com/t5/Uncharted/Pronounce-Elephant/ba-p/21272 analizzare il file del fonema CMU
Uso spesso la funzione >>log() per eseguire il debug di complicate corrispondenze di pattern.
https://community.jmp.com/t5/Uncharted/Backtracking-Secrets/ba-p/20984 usando il >>log() per il debug
e
https://community.jmp.com/t5/Uncharted/Pattern-Matching/ba-p/21005 introduzione a patMatch()
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008 introduzione a espressione regolare()
Re: Continua a chiedere informazioni sulla segmentazione RegexPerché ho bisogno di scorrere qualcosa del genere.
Voglio ancora imparare come utilizzare la regolarizzazione per rimuovere i dati in eccesso e conservare i dati utili per l'elaborazione continua con JSL. Grazie mille!
Re: Continua a chiedere informazioni sulla segmentazione RegexGrazie per l'aiuto degli esperti!
Ho scaricato JMP15 e ho imparato a farlo.
Ho confrontato diversi modi per ottenere i dati. Capisco la differenza tra loro.

Re: Continua a chiedere informazioni sulla segmentazione RegexJMP 15 fa un ottimo lavoro con questi dati JSON (rinomina il file da .txt a .json, sarà più semplice @Justin_Chilton ); JMP 14 non sembra gestire correttamente questo caso json. Ecco l'importazione di JMP 15 utilizzando la migliore ipotesi e aggiungendo l'opzione stack:
Best Guess is under the red triangleBest Guess è sotto il triangolo rosso potresti voler fare due importazioni come questa:
get the little table of column namesottieni la piccola tabella dei nomi delle colonne
get the bigger table of dataottenere la tabella di dati più grande
Puoi omettere le colonne che non vuoi. Puoi applicare i nomi delle colonne dalla piccola tabella alla grande tabella, rinominando value0 in 2018.
Re: Continua a chiedere informazioni sulla segmentazione RegexL'altro codice è
"\[[^\[]+(?=}$)"
Re: Continua a chiedere informazioni sulla segmentazione RegexHo due codici ortogonali nella comunità VBA, ma non li cambierò ancora in codice JSL.
Chiedi una guida esperta. Grazie!
Sub t()
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "^(?:.*?(\[.*?]))*|."
reg.Global = True
Cells(1, 2) = reg.Replace(Cells(1, 1).Value, "$1")
End Sub
Re: Continua a chiedere informazioni sulla segmentazione RegexNon ne so abbastanza.
Pensavo fosse solo una partizione
Iniziare con :[{
e finisci con il secondo}]
quindi può ottenere [{...}] e tra di loro.
Sembra che la mia comprensione originale fosse troppo affrettata.
Grazie!
Re: Continua a chiedere informazioni sulla segmentazione RegexUn'altra idea è progettare e scrivere un parser per una struttura di dati nidificata (elenco?) per eseguire lo streaming sul testo, creare i dati e quindi raccogliere i valori desiderati.
Re: Continua a chiedere informazioni sulla segmentazione RegexIl testo vero e proprio è molto più complesso dell'esempio che hai proposto e che abbiamo risolto.
Hai postato questo problema prima. Ho quindi provato a convertire prima il testo in un elenco JMP e quindi a scorrere gli elementi, anziché provare a lavorare con l'intero testo. JMP mi ha combattuto per tutto il tempo e nulla di ciò che ho provato ha funzionato. Forse qualcun altro sa come ottenere una lista. Sembra così semplice. Penso che l'elaborazione delle stringhe con Regex() sarebbe molto più semplice con il testo suddiviso in voci di elenco.
Re: Continua a chiedere informazioni sulla segmentazione RegexIl codice sopra per i dati effettivi non è ancora all'altezza.
Non credo di aver trovato la chiave.

Si prega di invitare esperti a continuare la guida. Grazie!
Re: Continua a chiedere informazioni sulla segmentazione RegexUn'altra forma:
Names Default to Here( 1 );
string = "abcdef{:[[ghi]]:[{op},{q}]}";
c = Regex( string, "\{:.+:(.+)\}", "\1" );Re: Continua a chiedere informazioni sulla segmentazione RegexEcco una potenziale alternativa:
c = Regex( "abcdef{:[[ghi]]:[{op},{q}]}", "\!\[(\{\w+\},*)+]" );Re: Continua a chiedere informazioni sulla segmentazione RegexEcco come lo farei:
Names Default To Here( 1 );
x = "abcdef{:[[ghi]]:[{op},{q}]}";
c=word(1,word(3,x,":"),"]") || "]";Re: Continua a chiedere informazioni sulla segmentazione RegexNon funziona neanche:
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]{([^\]]*)\]", "[{\1]");