Regulärer Ausdruck help - durch Komma getrennte Zeichenfolge

8

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?

    
John H. 23.06.2011, 02:05
quelle

4 Antworten

15

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+ ):

%Vor%

(Danke an Alan für den Hinweis auf einige meiner Fehler!)

    
Kerrek SB 23.06.2011 02:12
quelle
1

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.

    
NerdFury 23.06.2011 02:13
quelle
1

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 :

%Vor%

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!)

%Vor%     
badp 23.08.2013 08:54
quelle
0

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 ,]+
markets 23.06.2011 02:16
quelle

Tags und Links