regex | n-faches Vorkommen oder gar keins

yohb7Xoi

Mitglied
Ich hab ein Problem mit einer regex und komme dabei nur mäßig gut weiter. Ich habe einen String vor mir, der bisher von Semikolons getrennt ist:
"Beispiel 1;Beispiel2"

In Zukunft soll es möglich sein, auch optional für jedes Einzelelement noch eine # und eine Zahl hinzuschreiben:
"Beispiel1#10;Beispiel2#30"

Der String darf jedoch keine Mischform der beiden sein:
"Beispiel1#10;Beispiel2" wäre somit nicht erlaubt.

Am einfachsten ist natürlich, den String am Semikolon zu splitten und dann zu schauen, ob jedes Element der Regex genügt, aber ich hoffe, dass es eine Möglichkeit gibt mit einer regex zu klären. Habe ein bisschen mit lookbehind rumgespielt, komme aber zu keiner befriedigenden Lösung.
 
Am einfachsten ist natürlich, den String am Semikolon zu splitten und dann zu schauen, ob jedes Element der Regex genügt, aber ich hoffe, dass es eine Möglichkeit gibt mit einer regex zu klären.

Wie soll deiner Meinung nach das ganze sonst von statten gehen ?

Du hast einen Regulären Ausdruck , der String ( input ) wird mit deinem Pattern verglichen , ist dieser so wie er soll, wird er akzeptiert , andernfalls eben nicht , ich verstehe dein Problem da jetzt nicht so wirklich-

Der String darf jedoch keine Mischform der beiden sein:
"Beispiel1#10;Beispiel2" wäre somit nicht erlaubt.

Da stellt sich mir dann die Frage, wie du die CSV Datei einließt, da hier im normalfall ein splitten beim Separator, ( ; ) hier wie du eben schon erwähnt hast das sinnvollste wäre, die Prüfung findet dann im Regelfall nach dem aufteilen erst statt, ansonsten müsstest du jeden einzelnen Character in seiner Abfolge überprüfen und dann einzeln einlesen, was ich für unfug halte, oder die Gesammte CSV einlesen ohne zu splitten, was ebenfalls eher suboptimal ist.

->Einlesen->Splitten->überprüfen anhand REGEX->handeln.

die Frage die sich mir da dann noch stellt ist , wer erstellt diese Dateien ? Werden sie manuell oder durch eine andere Anwendung erstellt ?
 
Zuletzt bearbeitet:
Jetzt wo ich deine Antwort lese, stelle ich fest, dass ich gar keine richtige Frage gestellt habe. Gar nicht so clever von mir 🙂. Letztlich geht es darum den String auf Validität zu überprüfen. Da das ganze innerhalb von GWT stattfindet und ich bisher in der Ecke Dinge per regex prüfe, dachte ich mir, ich kann dies auch dieses Mal so erledigen, dann bräuchte ich keine Sonderlogik. Die Strings sind Benutzereingaben und werden nach der Validierung gespeichert.
 
dachte ich mir, ich kann dies auch dieses Mal so erledigen, dann bräuchte ich keine Sonderlogik.

Nunja, du kommst ohnehin nicht drumherum die Daten einzulesen, was du machen könntest ist eben schon während des Einlesens der einzelnen Elemente ( welche jeweils an dem jeweiligen Separator gesplittet werden ) zu prüfen ob das ggf. in einer lokalen Variable gespeicherte letzte Element eine Raute (#) enthält oder nicht , und dann daran deine Fallunterscheidung zu treffen ob weiter eingelesen wird oder ob du den vorgang abbrichst und ggf. eine Fehlermeldung ausgibst das die Datei nicht Ordnungsgemäß Formatiert ist etc... nur so als Gedankengang 🙂

dies ließe sich sicher auch anhand eines Regulären Ausdrucks festmachen.
 
Zuletzt bearbeitet:
Um mal zurück auf dir ursprüngliche Frage zu kommen
"geht das per RegExp?"
Ich bin zwar kein RegExp-Spezialist, aber es sollte eigentlich gehen, à la
{Fall1 OR Fall2}
mit Fall1: alle Teilstrings haben KEIN "#xx" (~> das ganze ist eine *-fache Liste von {Beispiel123} )
und Fall2: alle Teilstrings haben "#xx" (~> das ganze ist eine *-fache Liste von {Beispiel123#321} )

Als konkrete RegExp musst's aber selbst ausformulieren...
 
Zuletzt bearbeitet:

Zurück
Oben