Zählen Sie die numerischen Passagen in einer ZeichenfolgeDies ist wahrscheinlich ein sehr spezielles Beispiel, aber ich habe eine Zeichenfolge in einer JMP-Zelle und muss in der Lage sein, eine bestimmte Passage numerischer Zeichen in der Zeichenfolge zu isolieren. Die Zeichenfolge enthält sowohl Buchstaben als auch Zahlen und die Reihenfolge kann variabel sein. Wenn ich beispielsweise den Zelleneintrag
aaa1b222c3
und ich möchte mich auf die Passage 222 konzentrieren. Ich habe über eine Möglichkeit nachgedacht, die Anzahl der numerischen Passagen als 3 zu zählen und dann die zweite davon zu isolieren.
Ich habe eine Möglichkeit gefunden, dies mit Regex zu tun, aber es ist zu kompliziert, um es zu veröffentlichen. Ich bin sicher, dass es eine adaptivere Möglichkeit gibt, dorthin zu gelangen. Alle Ideen sind willkommen.
Tschüss
SpannerHead
Automatisierung und SkriptingBetreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeKönnten Sie weitere Beispiele für die möglichen Zeichenfolgen und die Teile liefern, die Sie isolieren möchten? Und was möchten Sie mit diesen Teilen tun? Sie extrahieren? Sie entfernen? Prüfen, ob sie vorhanden sind?
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeJarmo
Mein Hauptziel ist es, eine neue Spalte zu erstellen, die den numerischen Wert als Zelleneingabe enthält. Dies ergibt sich aus der Tatsache, dass der ursprüngliche Eintrag Dimensionsinformationen enthält und ich möchte, dass diese automatisch in numerischer Form verfügbar sind. Einer der numerischen Abschnitte ist eine Länge, der andere eine Breite. Es sind andere Zahlen enthalten und ich brauche eine Möglichkeit, diese zu umgehen. Die tatsächliche Zeichenfolge sieht eher aus wie
Val1b200X300
Das ist ein 200 x 300 cm großes Gerät und ich brauche neue Spalten mit Zellen, die diese Werte widerspiegeln. Die zusätzlichen numerischen Zeichen sind in Länge und Platzierung nicht einheitlich, was die Aufgabe komplexer macht.
Tschüss
SpannerHead
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeSind das immer drei Zeichen lang? Sind das immer die letzten beiden Zahlen? Sind die immer durch "X" getrennt?
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeJarmo
Teilweiser Verstoß gegen Murphys Gesetz. Nicht immer gleich lang, nicht immer die letzten 2 Zahlen, sondern immer durch ein X getrennt.
Tschüss
SpannerHead
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeDies kann ausreichend sein, Sie müssen jedoch möglicherweise einige zusätzliche Bedingungen hinzufügen (überprüfen Sie, ob es sich entweder am Anfang/Ende befindet oder ob davor/danach ein Buchstabe steht).
Names Default To Here(1);
str = "Val1b200X300abcc1";
r = Regex Match(str, "(\d+)X(\d+)");
Show(Num(r[2]), Num(r[3]));
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeJarmo
Tolle Sache! Hier ist, was mir am Ende eingefallen ist. Label ist die Spalte, die die Zeichenfolge enthält, an der ich eine Operation durchführen möchte.
New Column("Width", Character, "Nominal", Formula(Regex(:Label, "(\d+)X", "\1")), Set Selected);
New Column("Length", Character, "Nominal", Formula(Regex(:Label, "X(\d+)", "\1")), Set Selected);
Scheint zu funktionieren.
Tschüss
SpannerHead
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeDies hängt von Ihren Daten ab, aber Sie möchten Ihren Regex-Mustern möglicherweise eine kleine Ergänzung hinzufügen: Fügen Sie die Prüfung auf andere Zahlen auf der anderen Seite von X hinzu, um Probleme zu vermeiden, bei denen Sie nur etwas wie „1Xa“ erhalten würden.
Names Default To Here(1);
strs = {"A1X2", "A1Xa", "1X2", "a1X23", "aX2", "A1X2a"};
For Each({str}, strs,
a1 = Regex(str, "(\d+)X", "\1");
a2 = Regex(str, "X(\d+)", "\1");
// vs
b1 = Regex(str, "(\d+)X(\d+)", "\1");
b2 = Regex(str, "(\d+)X(\d+)", "\2");
Write("\!NCurrent string: ", str);
Write("\!NFirst pattern matches: ", a1, " ", a2);
Write("\!NSecond pattern matches: ", b1, " ", b2);
Write("\!N");
);
Current string: A1X2
First pattern matches: 1 2
Second pattern matches: 1 2
Current string: A1Xa
First pattern matches: 1 .
Second pattern matches: . .
Current string: 1X2
First pattern matches: 1 2
Second pattern matches: 1 2
Current string: a1X23
First pattern matches: 1 23
Second pattern matches: 1 23
Current string: aX2
First pattern matches: . 2
Second pattern matches: . .
Current string: A1X2a
First pattern matches: 1 2
Second pattern matches: 1 2
Betreff: Zählen Sie die numerischen Passagen in einer ZeichenfolgeAußerdem bestand mein erster Ansatz bei der Lösung des ursprünglichen Problems darin, die längste Zahlenfolge aus einem String zu extrahieren. Hier sind also ein paar Skripte dafür (könnten für jemanden nützlich sein).
1. Verwenden von Words() (eine ähnliche Idee könnte zum Extrahieren nicht numerischer Zeichenfolgen verwendet werden)
Names Default To Here(1);
str = "aaa1b222c3";
alphabets = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
nums = Words(str, alphabets);
lengths = Transform Each({num}, nums, Output("Matrix"), Length(num));
l_idx = Loc Max(lengths);
longest_num_seq = nums[l_idx];
show(nums, longest_num_seq); //nums = {"1", "222", "3"}, longest_num_seq = "222";
2. Verwenden von While + Regex
Names Default To Here(1);
str = "aaa1b222c3";
nums = {};
strcopy = str;
While(!IsMissing(match = Regex(strcopy, "\d+")),
idx = Contains(strcopy, match);
Insert Into(nums, match);
Remove From(strcopy, idx, Length(match));
);
l_idx = Loc Max(lengths);
longest_num_seq = nums[l_idx];
show(nums, longest_num_seq); //nums = {"1", "222", "3"}, longest_num_seq = "222";