Ricerca di stringhe utilizzando la stringa parziale<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tutto,
Sto cercando di cercare corrispondenze di stringhe con stringhe parziali come criteri di ricerca. Ho provato diversi modi come mostro di seguito - credo che ci debba essere un modo migliore usando RegEx o Pat Match per farlo - ma non riesco a farlo bene. Qualsiasi aiuto sarà apprezzato .
Per il bene di un esempio, sto usando la tabella dei dati di esempio del traffico aereo:
// Metodo # 1 Usando Pat Match
dt = Tabella dati corrente();
ColNames = dt << Get COlumn Names();
Corrispondenza = lista();
sp = Pat Span("ID");
Pat Match(ColNames,sp>>Match);
Incontro;
// Questo non produce corrispondenze . Tuttavia, nello stesso codice, se l'ID stesso era un nome di colonna, funziona. Quindi voglio capire come utilizzare parte della stringa di ricerca per eseguire la ricerca.
// Metodo n. 2 Utilizzo di Contains()
for( i=1, i<= N Items(ColNames),i++,
If(Contiene(ColNames ,"ID")== 1,
Inserisci in(Match,i);
);
);
Migliore
uday
Oggetto: Ricerca di stringhe utilizzando una stringa parzialeSembra che un ciclo esplicito sarà più facile e più chiaro.
for( icol = 1, icol <= nitems(colnames), icol++,
// usa regex su char(colnames ) ed esci da questo loop quando ottieni la corrispondenza di cui hai bisogno.
)
Poiché i nomi delle colonne hanno virgole e hai bisogno dell'indice icol e la regex può essere molto più semplice.Questo non è testato, ma qualcosa di simile
if( ! ismissing( regex( char(colnames[ icol ]), "ID" ) ), break() );
testerebbe ogni icol per l'ID nel nome.regex restituisce missing se la corrispondenza fallisce.
Oggetto: Ricerca di stringhe utilizzando una stringa parzialeCraige@JMP :
Mentre la soluzione che hai fornito funziona, se posso avere 2 domande di follow-up:
1. Come otterresti gli indici quando vengono trovate corrispondenze?
2. Se i nomi delle colonne hanno questo aspetto, cosa che fanno nel mio caso
Nome( "IPhone 7, California, Sì") - ColNames
Nome(\!" iPhone 7 , California , SÌ \!") - ColString
Per favore consiglio.
Migliore
Uday
Oggetto: Ricerca di stringhe utilizzando una stringa parzialemagari così:
dt = Tabella dati corrente();
ColNames = dt << Get COlumn Names();
corde = char (colnomi);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
spettacolo(Incontro);
Corrispondenza = "ID volo";
che dipende dai nomi delle colonne che non utilizzano virgole o parentesi graffe.La funzione char trasforma l'elenco di nomi in una stringa:
{Compagnia aerea, codice vettore, numero volo, numero coda, ID volo, evento, aeroporto, ora,
Ora originale, longitudine, latitudine}
diventa
"{Compagnia aerea, codice vettore, numero volo, numero coda, ID volo, evento, aeroporto, ora, ora originale, longitudine, latitudine}"
Ho scelto regex per questo perché ... beh, non sarà bello in entrambi i casi.Abbattere il pattern regex:
"[{,] una parentesi graffa aperta o una virgola
\s* spazio vuoto facoltativo
([^{,}]*ID[^{,}]*) le parentesi esterne sono la corrispondenza \1 (più sotto)
[,}]" una virgola o una parentesi graffa stretta
scomponendo la parte \1:
[^{,}]* zero o più caratteri che non siano parentesi graffe o virgole
Identifica la parola che stai cercando nel nome di una colonna
[^{,}]* zero o più caratteri che non siano parentesi graffe o virgole
il terzo arg di regex, "\1", significa utilizzare la prima parentesi aperta per identificare il testo sostitutivo.