Suche nach Zeichenfolgen mit Teilzeichenfolge<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Alle,
Ich versuche, nach Zeichenfolgenübereinstimmungen mit Teilzeichenfolge als Suchkriterium zu suchen. Ich habe mehrere Möglichkeiten ausprobiert, wie ich unten zeige - ich glaube, es muss einen besseren Weg geben, RegEx oder Pat Match zu verwenden, um dies zu tun -, aber ich bin nicht in der Lage, es richtig zu machen. Jede Hilfe wird geschätzt .
Als Beispiel verwende ich die Air Traffic Sample Data-Tabelle:
// Methode Nr. 1 mit Pat Match
dt = Aktuelle Datentabelle ();
ColNames = dt << Get COlumn Names();
Übereinstimmung = Liste ();
sp = Pat Span("ID");
Pat-Match(ColNames,sp>>Match);
Passen;
// Dies ergibt keine Übereinstimmungen . Im gleichen Code jedoch – wenn ID selbst ein Spaltenname war – funktioniert dies. Ich möchte also verstehen, wie ein Teil der Suchzeichenfolge für die Suche verwendet wird.
// Methode Nr. 2 mit Contains()
for( i=1, i<= N Elemente(Spaltennamen),i++,
Wenn (enthält (Spaltennamen ,"ID")== 1,
Einfügen in (Übereinstimmung, i);
);
);
Am besten
uday
Betreff: Suche nach Zeichenfolgen mit TeilzeichenfolgeKlingt so, als wäre eine explizite Schleife einfacher und klarer.
for( icol = 1, icol <= nitems(colnames), icol++,
// Regex für char(colnames ) und brechen Sie aus dieser Schleife aus, wenn Sie die Übereinstimmung erhalten, die Sie benötigen.
)
Da die Spaltennamen Kommas haben und Sie den Icol-Index benötigen, kann die Regex viel einfacher sein.Dies ist nicht getestet, aber so etwas wie
if( ! ismissing( regex( char(colnames[icol ]), "ID" ) ), break() );
würde jedes icol auf ID im Namen testen.Regex gibt fehlende zurück, wenn die Übereinstimmung fehlschlägt.
Betreff: Suche nach Zeichenfolgen mit TeilzeichenfolgeCraige@JMP :
Während die von Ihnen bereitgestellte Lösung funktioniert - wenn ich darf, habe ich 2 Folgefragen:
1. Wie würden Sie die Indizes erhalten, wenn Übereinstimmungen gefunden werden?
2. Wenn die Spaltennamen so aussehen - was sie in meinem Fall tun
Name ("IPhone 7, Kalifornien, ja") - ColNames
Name(\!" iPhone 7 , Kalifornien , Ja \!") - ColString
Bitte beraten.
Am besten
Utag
Betreff: Suche nach Zeichenfolgen mit Teilzeichenfolgevielleicht so:
dt = Aktuelle Datentabelle ();
ColNames = dt << Get COlumn Names();
colstrings = verkohlen (Spaltennamen);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
Show-Match);
Übereinstimmung = "Flug-ID";
was davon abhängt, dass die Spaltennamen keine Kommas oder geschweiften Klammern verwenden.Die Funktion char wandelt die Namensliste in einen String um:
{Fluggesellschaft, Carrier-Code, Flugnummer, Hecknummer, Flug-ID, Ereignis, Flughafen, Zeit,
Ursprüngliche Zeit, Längengrad, Breitengrad}
wird
"{Airline, Carrier Code, Flight Number, Tail Number, Flight ID, Event, Airport, Time, Original Time, Longitude, Latitude}"
Ich habe Regex dafür gewählt, weil ... nun, es wird so oder so nicht schön sein.Aufschlüsselung des Regex-Musters:
"[{,] entweder eine offene geschweifte Klammer oder ein Komma
\s* optionaler Leerraum
([^{,}]*ID[^{,}]*) die äußeren Klammern sind die \1-Übereinstimmung (mehr unten)
[,}]" entweder ein Komma oder eine geschweifte Klammer
Aufschlüsselung des \1-Teils:
[^{,}]* null oder mehr Zeichen, die keine geschweiften Klammern oder Kommas sind
Identifizieren Sie das gesuchte Wort in einem Spaltennamen
[^{,}]* null oder mehr Zeichen, die keine geschweiften Klammern oder Kommas sind
Das dritte Argument für Regex, "\1", bedeutet, dass der erste offene Elternteil verwendet wird, um den Ersetzungstext zu identifizieren.