Mein Text des folgenden Format:regex - diesen Teil passen nur, wenn die vorherigen Teil angepasst
<command>,<cabinet>,<drawer>,<report>
Regeln sind:
<command>
: 3-stellige Buchstaben nur,
<cabinet>
: 1-4 stellige numeric,
<drawer>
: 1 stellige alphanumerische zwischen A bis I,
<report>
: 1-4 stelliges numerische
Jedes Segment ist nur sinnvoll, wenn das vorherige existiert. Kann annehmen, dass der Schrank immer vorhanden ist, sonst ist es einfach nicht nützlich, den Befehl zu finden.
Beispiel:
SRH,898
SRH,898,G
SRH,898,G,900
Non Beispiel:
SRH,,,898 // <report> without <cabinet> or <drawer>
SRH,898,,900 // <report> without <drawer>. Take only upto SRH,898 .. ignoring the rest
Ich kam auf diese: [a-z$]{3},\d{1,4},([a-i])?(,\d+)?
Problem:
Fälle wie SRH,898,,900
mit dieser Regex gültig sind, während Idealerweise sollte es ungültig sein, wie <report>
(900) existiert ohne <drawer>
. Ich will es versuchen und Spiel für die <report>
nur, wenn<drawer>
vorhanden ist, wobei in diesem Fall die <drawer>
wird von einem ,
vom <report>
getrennt werden, wenn <report>
auch vorhanden ist.
Ich denke, ich kann dies in zwei Schleifen tun, die zweite würde hintereinander ,
-s herausfiltern, aber hatte gehofft, etwas Besseres kann getan werden.
Irgendwelche Hilfe?
Dank
Schluss aktualisieren: https://regex101.com/r/i7HnLf/3 ist das gute Zeug :) Vielen Dank für die Hilfe :)
Ihr Muster stimmt nicht ganz mit den Anforderungen überein. Es muss etwas sein wie^^ [a-zA-Z0-9] {3} (?:, [0-9] {1,4} (?:, [A-Ia-i0-9] (?:, [0-9] {1,4})?)?)? $ –
@ WiktorStribiżew Ich denke, du warst verwirrt durch den alphanumerischen Teil. Mein Fehler, ich habe den Text etwas modifiziert. Befehl ist nur Buchstaben, keine Zahlen. Danke :) – Somjit
@Somjit: einfach verwenden - '^ [a-zA-Z] {3} (?:, \ D {1,4} (?:, [A-iA-I] (?:, \ D {1,4})?)?)? $ – GurV