Ich schreibe nicht viele reguläre Ausdrücke, also brauche ich Hilfe bei der einen.
Ich brauche einen regulären Ausdruck, der validieren kann, dass eine Zeichenfolge eine alphanumerische, durch Kommas getrennte Zeichenfolge ist.
Beispiele:
123, 4A67, GGG, 767
wäre gültig. 12333, 78787&*, GH778
wäre ungültig fghkjhfdg8797<
wäre ungültig Das habe ich bisher, aber nicht ganz richtig: ^(?=.*[a-zA-Z0-9][,]).*$
Irgendwelche Vorschläge?
Klingt so, als ob Sie einen Ausdruck wie diesen brauchen:
%Vor%Posix ermöglicht die mehr selbstbeschreibende Version:
%Vor% Wenn Sie auch Unterstriche zulassen möchten, suchen Sie nach ganzen Wörtern ( \w+
):
(Danke an Alan für den Hinweis auf einige meiner Fehler!)
Probieren Sie dieses Muster aus: ^([a-zA-Z0-9]+,?\s*)+$
Ich habe es mit Ihren Fällen getestet, genauso wie mit einer einzigen Zahl "123". Ich weiß nicht, ob du immer ein Komma hast oder nicht.
[a-zA-Z0-9]+
bedeutet, dass 1 oder mehr dieser Symbole übereinstimmen
Das ,?
bedeutet, dass 0 oder 1 Kommas übereinstimmen (im Prinzip ist das Komma optional)
Der \s*
behandelt 1 oder mehr Leerzeichen nach dem Komma
und schließlich sagt die äußere +
Übereinstimmung 1 oder mehr des Musters.
Dies wird auch übereinstimmen
123 123 abc
(keine Kommas), was ein Problem sein könnte
Dies entspricht auch 123,
(endet mit einem Komma), was ein Problem sein könnte.
Ja, wenn Sie kommaseparierte Dinge aufspüren wollen, bei denen ein Komma am Ende nicht legal ist und die Dinge mit $LONGSTUFF
übereinstimmen, müssen Sie $LONGSTUFF
:
Wenn $LONGSTUFF
wirklich lang ist und Komma-Elemente usw. enthält, ist es eine gute Idee, nicht die Regexp von Hand zu erstellen und stattdessen auf einen Computer angewiesen zu sein , auch wenn es nur durch String-Verkettung ist. Ich wollte zum Beispiel nur einen regulären Ausdruck erstellen, um den CPUID-Parameter einer XEN-Konfiguration zu überprüfen Datei vom Typ ['1:a=b,c=d','2:e=f,g=h']
. Ich ... glaube, das passt meistens zur Rechnung: (whitespace nicht!)
Ihnen scheint die Wiederholung zu fehlen. Wie wäre es mit:
%Vor%Ich bin nicht sicher, wie Sie das in VB.Net ausdrücken würden, aber in Python:
%Vor% Sie können Verknüpfungen verwenden, anstatt den [a-zA-Z0-9 ]
-Teil aufzulisten, aber das ist wahrscheinlich leichter zu verstehen.
Analyse der Highlights:
[a-zA-Z0-9 ]+
: Erfasse einen oder mehrere (aber nicht null) der aufgelisteten Bereiche und Leerzeichen. (?:[...]+,)*
: Passe in nicht-einfangenden Klammern eines oder mehrere der Zeichen sowie ein Komma am Ende an. Passen Sie solche Sequenzen null oder mehrmals an. Das Erfassen von Nullzeiten ermöglicht kein Komma. [...]+
: Erfasse mindestens eines von diesen. Dies beinhaltet kein Komma. Dies stellt sicher, dass kein nachkommendes Komma akzeptiert wird. Wenn ein abschließendes Komma zulässig ist, ist der Ausdruck einfacher: ^[a-zA-Z0-9 ,]+