Extrahiere die Zahl neben dem StringHallo, kann mir jemand helfen, Zahlen zu extrahieren, die an Zeichenfolgen angrenzen?
Ich habe Spalte 1 unten angezeigt und erwarte, Zahlen neben „HFA“ (Spalte 2) zu extrahieren.
Ich habe das folgende JSL ausprobiert, konnte aber nicht die erwartete Spalte2 erhalten
Num( Regex( :Spalte 1, "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )
| Spalte1 | Spalte2 |
| 400HFA isa300 | 400 |
| isa300 HFA400 | 400 |
Vielen Dank, dass Sie sich mit der Frage auseinandersetzen.
Automatisierung und SkriptingBetreff: Zahl neben String extrahierenHALLO @jthi
Vielen Dank für Ihre alternative Lösung des Problems und auch für den Link zu Regex.
Betreff: Zahl neben String extrahierenHallo @Craige_Hales ,
Vielen Dank für die Bereicherung der Diskussion.
Tatsächlich habe ich zum ersten Mal von JMPs Regex aus Ihrem alten Artikel erfahren!
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008
Betreff: Zahl neben String extrahierenEin guter Ort zum Üben und Testen von Regex ist https://regex101.com/ .

Diese Kommentare mit entfernten JMP-Escape-Zeichen waren sehr hilfreich, ich muss anfangen, diese hinzuzufügen, wenn ich kompliziertere Regex-Muster schreibe ( Regex-Problem mit Escape-Zeichen )
Betreff: Zahl neben String extrahierenDanke @AprioriFish3134 für den Hinweis auf das ursprüngliche Problem (kein \2), und @ngambles für eine gute Lösung.
Wenn Sie noch mehr Ebenen verschachtelter Klammern oder der sequentiellen Klammern in Ihrem Beispiel benötigen, zählen Sie einfach die offenen Klammern von links nach rechts, um die hintere Referenznummer zu ermitteln. Die Rückreferenz für unbenutzte Alternativen ist ein leerer String.
Regex( "abac", "(((a)|(b)|(c))(c))+", "1=\1 2=\2 3=\3 4=\4 5=\5 6=\6" )
"1=ac 2=a 3=a 4= 5= 6=c"
Eine Sache, die vielleicht nicht offensichtlich ist: Die Rückreferenz kann auch im Muster verwendet werden. Dies kann nützlich sein, um sicherzustellen, dass führende und abschließende Anführungszeichen oder Apostrophe konsistent verwendet werden:
Write( Regex(
"before 'a \!"b\!" c' after", // before 'a "b" c' after
"(\!"|')(.*?)\1", // ("|')(.*?)\1
"\2"
) )
ein "b" c
(Das Escapezeichen \!" fügt ein Anführungszeichen in die Zeichenfolgen ein; der Kommentar zeigt den Text der Zeichenfolge.) In diesem Beispiel kann \1 group entweder auf " oder ' passen und \2 passt auf den gesamten Text bis zu einem weiteren Vorkommen von \1.
Verwenden Sie einige Kommentare, wenn Sie Regex wie diesen schreiben! Der nächste Betreuer wird es zu schätzen wissen.
Betreff: Zahl neben String extrahierenWenn es aus irgendeinem Grund notwendig ist, das Problem anzugehen @ngambles Wie bereits erwähnt, wäre eine ziemlich einfache Möglichkeit, Regex Match anstelle von Regex zu verwenden
Names Default To Here(1);
a = "400HFA isa300";
b = "isa300 HFA400";
c = "400HFA300";
d = "400HF300";
rgx_pattern = "(\d*)(?:HFA)(\d*)";
show(Regex Match(a, rgx_pattern));
show(Regex Match(b, rgx_pattern));
show(Regex Match(c, rgx_pattern));
show(Regex Match(d, rgx_pattern));
Regex Match erfordert jedoch einige zusätzliche Überprüfungen, da es eine Liste der erfassten Gruppen zurückgibt.
Betreff: Zahl neben String extrahierenHallo Ngambels,
Vielen Dank für Ihre Hilfe. Es hat das Problem gelöst.
Ich habe es versucht
"(\d*)HFA(\d*)"
aber anscheinend habe ich es verpasst (ich wusste nicht, dass ich sowohl \1 als auch \2 verwenden kann und muss)
"\1\2"
Ich habe neue Dinge von Ihnen und durch diese Diskussion gelernt.
Noch ein Mal vielen Dank!
Betreff: Zahl neben String extrahierenAngesichts des kleinen Beispielsatzes funktioniert die folgende Formel:
Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )
Bei dieser Lösung treten Probleme auf, wenn Sie Instanzen wie „400HFA300“ haben.Es wird 400300 zurückgegeben.