Entwickler-Ecke

Basistechnologien - Regex um gültigen Code zu ermitteln


shaun - Fr 26.08.16 18:20
Titel: Regex um gültigen Code zu ermitteln
Hallo zusammen,

ein String Object soll mittels Regex auf Gültigkeit geprüft werden.

Code kann diese Varianten enthalten:

Quelltext
1:
2:
[int][A][int] & evtl. mehrere weitere Stellen [,][int] +[;]
Bsp.: 7A1; 8A3; 9A2,4; 11A1,2; 14A1; 15A2; 16A1;

Habe mich mit Regex bisher nicht befasst und habe bisher nur das zustandegebracht.

C#-Quelltext
1:
new Regex(@"([0-9][A][0-9])")                    

Das Ergebnis ist aber keine zuverlässige Prüfung. Kann mir jemand`von euch einen Tip geben ?

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Delete - Fr 26.08.16 18:35

- Nachträglich durch die Entwickler-Ecke gelöscht -


shaun - Fr 26.08.16 18:43

Hallo Frühlingsrolle,

gültig sollte folgende Eingaben sein:

4A2;
2A3,3;
18A7,4,5;
19A1; 8A5,2;
20A2; 21A1,5,4;

...und das ganze beliebig hintereinander.

Nicht gültig sollten irgendwelche anderen Buchstaben / Sonderzeichen sein:
4B1.2
4B1 2
oder irgendein anderer Text der irrtümlich aus dem Clipboard eingefügt werden könnte -
und nicht dem oben genannten Format entspricht.


Yankyy02 - Fr 26.08.16 19:11

Hallo Shaun,

leider kann ich aus deinen gültigen und ungültigen Beispielen kein Muster erkennen allerdings kann ich dir folgendes Tut [http://www.mycsharp.de/wbb2/thread.php?threadid=41009] zu Regex empfehlen was dich an dein Ziel bringen sollte.


Delete - Fr 26.08.16 19:15

- Nachträglich durch die Entwickler-Ecke gelöscht -


shaun - Fr 26.08.16 19:33

Das Tut habe ich mir gestern erst angesehen - verstehe aber ehrlich gesagt viel nicht. Schande über mich.

Das Pattern erlaubt im Augenblick noch Fehleingaben wie 3A,,2;;


Zur Erklärung - warum das ganze:

Es gibt eine List<ModulClass> mit sagen wir 20 Einträgen.
Jede ModulClass enthält eine Propety List<actions> in der
eine Variable Anzahl an Actions(Strings) stehen.

Ich versuche einen IndexCode zu generieren - bzw. diesen in
eine List<ModulClass> umzuwandeln.

Ein bereits vorhandener Code wird vom User eingegeben.
Diesen möchte ich darauf prüfen, ob es sich auch um einen wirklich
auswertbaren Code im Format x[A][x],?[x]; handelt.

Ich hoffe das war einigermaßen verständlich :)


Palladin007 - Fr 26.08.16 19:50

Also die Format-Definition x[A][x],?[x]; kenne ich so nicht :D

Es sieht aber so aus, dass:
Sehe ich das richtig so?


Delete - Fr 26.08.16 19:51

- Nachträglich durch die Entwickler-Ecke gelöscht -


Palladin007 - Fr 26.08.16 19:53

Frühlingsrolle war ein bisschen schneller :D

Nach meinem Verständnis, meine Variante vom Pattern:

https://regex101.com/r/dD9oE7/2

PS:
Das Pattern matcht aktuell jeden validen Code, auch wenn er in einem invaliden Code liegt.
Das ließe sich einfach umgehen, wenn Du auf das Semikolon splittest und dann folgendes Pattern verwendest:

^\s*\d+(?:A\d+)?(?:,\d+)*\s*$

Das prüft dann ob der vollständige String genau einen Code enthält - ohne Semikolon, Leerzeichen vor und danach sind erlaubt


Delete - Fr 26.08.16 20:05

- Nachträglich durch die Entwickler-Ecke gelöscht -