Cerca stringhe usando una stringa parziale<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tutto,
Sto cercando di cercare corrispondenze di stringhe con una stringa parziale 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 .
A titolo di esempio, sto utilizzando la tabella dei dati di esempio del traffico aereo:
// Metodo n. 1 con Pat Match
dt = tabella dati corrente();
ColNames = dt << Ottieni i nomi delle colonne();
Corrispondenza = lista();
sp = Intervallo Pat("ID");
Pat Match(ColNames,sp>>Match);
Incontro;
// Questo non produce corrispondenze. Tuttavia, nello stesso codice, se l'ID stesso era il nome di una 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 elementi(ColNames),i++,
If(Contiene(ColNames ,"ID")== 1,
Inserisci in(Corrispondenza,i);
);
);
Migliore
oggi
Re: ricerca di stringhe utilizzando una stringa parzialeSembra che un ciclo esplicito sarà più semplice e chiaro.
for( icol = 1, icol <= nitems(colnames), icol++,
// usa regex su char(colnames ) ed esci da questo ciclo 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 del genere
if( ! ismissing( regex( char(colnames[ icol ]), "ID" ) ), break() );
testerebbe ogni icona per l'ID nel nome.regex restituisce mancante se la corrispondenza non riesce.
Re: ricerca di stringhe utilizzando una stringa parzialeCraige@JMP :
Mentre la soluzione che hai fornito funziona, se posso ho 2 domande di follow-up:
1. Come otterresti gli indici quando vengono trovate delle 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
Si prega di consigliare.
Migliore
Uday
Re: ricerca di stringhe utilizzando una stringa parzialemagari così:
dt = tabella dati corrente();
ColNames = dt << Ottieni i nomi delle colonne();
colstring = car (cognomi);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
spettacolo (Partita);
Corrispondenza = "ID volo";
che dipende dai nomi delle colonne che non utilizzano virgole o parentesi graffe.La funzione char trasforma l'elenco dei nomi in una stringa:
{Compagnia aerea, codice vettore, numero di volo, numero di coda, ID volo, evento, aeroporto, ora,
Ora originale, longitudine, latitudine}
diventa
"{Compagnia aerea, codice vettore, numero di volo, numero di coda, ID volo, evento, aeroporto, ora, ora originale, longitudine, latitudine}"
Ho scelto regex per questo perché... beh, non sarà bello in nessun caso.Scomposizione del pattern regex:
"[{,] una parentesi graffa aperta o una virgola
\s* spazio bianco opzionale
([^{,}]*ID[^{,}]*) le parentesi esterne sono la corrispondenza \1 (più sotto)
[,}]" una virgola o una parentesi graffa chiusa
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 alla regex, "\1", significa usare la prima parentesi aperta per identificare il testo sostitutivo.