2017-02-22 2 views
1

Ich versuche, das eine Eingabezeichenfolge zu überprüfen, die eine Versionsnummer des richtigen Formats enthält.Regulärer Ausdruck für Versionsnummer (vX.X.X) funktioniert nicht

vX.X.X 

wobei X eine beliebige Anzahl von Ziffern sein können, z:

v1.32.12 or v0.2.2 or v1232.321.23 

Ich habe den folgenden regulären Ausdruck:

v([\d.][\d.])([\d]) 

Dies funktioniert nicht.

Wo ist mein Fehler?

EDIT: Ich benötige auch die Zeichenfolge, die eine maximale Länge von 20 Zeichen zu haben, gibt es eine Möglichkeit, dies durch regex zu tun oder ist es am besten, nur regelmäßige Python len() verwenden

+0

meinst du die ganze Schnurlänge? –

+0

@AvinashRaj Ja, die Zeichenfolge wird in einer "Versions" -Variable gespeichert, z. 'version =" v0.2.1 "' und ich möchte überprüfen, dass die Gesamtlänge dieser Variablen <20 Zeichen ist. – Sithling

+1

Für Länge überprüfen Sie diese https://regex101.com/r/tMBYzL/1 –

Antwort

5

Beachten Sie, dass [\d.] sollten übereinstimmen irgendein Zeichen entweder eine Ziffer oder ein Punkt.

v(\d+)\.(\d+)\.\d+ 

Verwenden Sie \d+, um eine oder mehrere Ziffern zu finden.

Beispiel:

>>> import re 
>>> s = ['v1.32.12', 'v0.2.2' , 'v1232.321.23', 'v1.2.434312543898765'] 
>>> [i for i in s if re.match(r'^(?!.{20})v(\d+)\.(\d+)\.\d+$', i)] 
['v1.32.12', 'v0.2.2', 'v1232.321.23'] 
>>> 

(?!.{20}) Vorgriff-negativen zu den Startüberprüfungen für die Stringlänge vor Übereinstimmen. Wenn die Zeichenfolgenlänge mindestens 20 beträgt, würde sie sofort fehlschlagen, ohne dass eine Übereinstimmung für diese bestimmte Zeichenfolge gefunden wird.

+0

Danke, das funktioniert! – Sithling

+1

Wenn es für Sie funktioniert, akzeptieren Sie diese Antwort als Lösung für Ihre Frage – radicarl

+1

@radicarl Done, wurde mit einer 15-Minuten-Grenze unterworfen.^_^ – Sithling

0

@Avinash Raj.Ihre Antwort ist perfekt, außer für eine Korrektur. Es würde nur 19 Zeichen erlauben. Lichtkorrektur

>>> import re 
>>> s = ['v1.32.12', 'v0.2.2' , 'v1232.321.23', 'v1.2.434312543898765'] 
>>> [i for i in s if re.match(r'^(?!.{21})v(\d+)\.(\d+)\.\d+$', i)] 
['v1.32.12', 'v0.2.2', 'v1232.321.23'] 
>>> 
+0

siehe http://stackoverflow.com/questions/42390661/regular-expression-for-version-number-vx-x-x-not-working/42390685#comment71929048_42390661 Kommentar. Es sollte weniger als 20 sein. –