Suchen Sie nach Zeichenfolgen mithilfe von Teilzeichenfolgen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Alle,
Ich versuche, nach Zeichenfolgenübereinstimmungen mit teilweiser Zeichenfolge 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 schaffe es nicht, es richtig zu machen. Jede Hilfe wird geschätzt.
Als Beispiel verwende ich die Beispieldatentabelle für den Flugverkehr:
// Methode Nr. 1 mit Pat Match
dt = Aktuelle Datentabelle();
ColNames = dt << Get COlumn Names();
Match = list();
sp = Pat Span("ID");
Pat Match(ColNames,sp>>Match);
Übereinstimmen;
// Dies ergibt keine Übereinstimmungen. Allerdings funktioniert dies im selben Code – wenn die ID selbst ein Spaltenname war. Ich möchte also verstehen, wie man einen Teil der Suchzeichenfolge für die Suche verwendet.
// Methode Nr. 2 mit Contains()
for( i=1, i<= N Items(ColNames),i++,
If(Contains(ColNames ,"ID")== 1,
Einfügen in(Match,i);
);
);
Am besten
Uday
Betreff: Suche nach Zeichenfolgen mithilfe einer TeilzeichenfolgeKlingt so, als wäre eine explizite Schleife einfacher und klarer.
for( icol = 1, icol <= nitems(colnames), icol++,
// Regex für char(colnames.) verwenden ) und durchbrechen Sie diese Schleife, wenn Sie die benötigte Übereinstimmung erhalten.
)
Da die Spaltennamen Kommas haben und Sie den icol-Index benötigen, kann der reguläre Ausdruck viel einfacher sein.Das ist zwar nicht getestet, aber so ähnlich
if( ! ismissing( regex( char(colnames[ icol ]), "ID" ) ), break() );
würde jedes Icol auf ID im Namen testen.Regex gibt „missing“ zurück, wenn die Übereinstimmung fehlschlägt.
Betreff: Suche nach Zeichenfolgen mithilfe einer TeilzeichenfolgeCraige@JMP :
Obwohl die von Ihnen bereitgestellte Lösung funktioniert, hätte ich, wenn ich darf, zwei weitere Fragen:
1. Wie erhalten Sie die Indizes, wenn Übereinstimmungen gefunden werden?
2. Wenn die Spaltennamen so aussehen – was in meinem Fall der Fall ist
Name( „IPhone 7, Kalifornien, Ja“) – ColNames
Name(\!" IPhone 7 , Kalifornien , Ja \!") - ColString
Bitte um Rat.
Am besten
Uday
Betreff: Suche nach Zeichenfolgen mithilfe einer Teilzeichenfolgevielleicht so:
dt = Aktuelle Datentabelle();
ColNames = dt << Get COlumn Names();
colstrings = verkohlen (Spaltnamen);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
Show-Match);
Match = "Flug-ID";
Dies hängt davon ab, dass die Spaltennamen keine Kommas oder geschweiften Klammern verwenden.Die char-Funktion wandelt die Namensliste in einen String um:
{Fluggesellschaft, Carrier-Code, Flugnummer, Hecknummer, Flug-ID, Ereignis, Flughafen, Zeit,
Ursprüngliche Zeit, Längengrad, Breitengrad}
wird
„{Fluggesellschaft, Carrier-Code, Flugnummer, Hecknummer, Flug-ID, Ereignis, Flughafen, Zeit, Originalzeit, Längengrad, Breitengrad}“
Ich habe dafür Regex 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 schließende 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, bei denen es sich nicht um geschweifte Klammern oder Kommas handelt
Das dritte Argument für die Regex, „\1“, bedeutet, dass das erste offene Paren verwendet wird, um den Ersetzungstext zu identifizieren.