Zahlen aus Zeichenfolgen ungleicher Größe extrahierenIch habe eine Spalte mit Zeichenfolgen mit eingebetteten Zahlen. Ich weiß, wie ich feststellen kann, ob diese Zeichenfolgen den richtigen Text enthalten, nach dem ich suche, aber nicht, wie ich die Werte extrahieren kann, die nach jeder dieser Zeichenfolgen kommen. Wenn die Zeichenfolgengrößen gleich wären, könnte ich einfach die Munger-Funktion basierend auf dem Standort verwenden, aber dies ist nicht möglich, da die Zeichenfolgengröße nicht konsistent ist.
ZB "Der Fix in ist abcde +0.2, hier steht mehr Text fghij -1."
Ich möchte nach "abcde" und "fghij" abfragen und die jeweiligen Werte +0,2 und -1 im Leerzeichen direkt nach dem Erscheinen der Zeichenfolgen extrahieren. Es gibt normalerweise ein Leerzeichen, gefolgt von +/- und einer Zahl (ganze Zahlen und Dezimalstellen bis zu einer Dezimalstelle, wie oben gezeigt).
Re: Extrahiere Zahlen aus Strings ungleicher LängeNoch ein anderer Weg - versuchen Sie die Wortfunktion.Dies ist die Spaltenformel:
look_for = {"abcde", "fghij", "klmno"};
wlist = Words( :Column 1, " " );
one_num = .;
For( i = 1, i <= N Items( look_for ), i++,
one_word = look_for[i];
f = Contains( wlist, one_word );
If( f,
one_num = Num( wlist[f + 1] );
Break();
);
);
one_num;Re: Extrahiere Zahlen aus Strings ungleicher LängeSie können auch die verwenden Regex() Funktion mit regulären Ausdrücken in einer Spaltenformel. Dieser Ansatz kann hilfreich sein, wenn das von Ihnen angegebene Beispiel nicht alle möglichen Bedingungen zeigt. Dies ist ein Skript zur Veranschaulichung der Idee.
Names Default to Here( 1 );
text = "The fix in is abcde +0.2, there is more text here fghij -1.";
answer 1 = Num( Regex( text, ".*abcde ([-+]?\d?.?\d?)", "\1" ) );
answer 2 = Num( Regex( text, ".*fghij ([-+]?\d?.?\d?)", "\1" ) );
Das Text Variable im Skript stellt die aktuelle Zeile für eine Spaltenformel dar. Das Antwort 1 wäre das Ergebnis in derselben Zeile der ersten neuen Ergebnisspalte. Für die Formel verwenden Sie den Ausdruck rechts vom Gleichheitszeichen.
Dieses Beispiel ist einfach. Es müsste erweitert und verfeinert werden, wenn die Art des Textes oder das Vorwort zu den Nummern komplizierter wäre.
Sie haben auch JMP-Muster zum Abgleichen, Zurückgeben und Ersetzen von Zeichenfolgen.
Re: Extrahiere Zahlen aus Strings ungleicher LängeSehen Sie sich die Word()-Funktion an.Angesichts der von Ihnen angegebenen Beispiele könnte man einfach nach dem zweiten Wort in der Zeichenfolge suchen, basierend auf dem Finden eines Leerzeichens
Word(2, , " " )
oder
Sie können Contains() finden, um ein "+" oder "-" zu finden, und von dort substr() die Zeichenfolge, um den numerischen Wert zu erhalten
Anbei die folgende Datentabelle
