2011-10-24 13 views
10

ho bisogno di validare un numero di versione che consiste di 'v' più int positiva, e nient'altro esempio "v4", "v1004"con tasselli in python regex per ottenere corrispondenza esatta

ho

import re 
pattern = "\Av(?=\d+)\W" 

m = re.match(pattern, "v303") 
if m is None: 
    print "noMatch" 
else: 
    print "match" 

Ma questo non funziona! Rimozione del \ A e \ W corrisponderà per V303 ma anche corrispondere per v30G, per esempio

Grazie

risposta

4

Penso che si potrebbe voler \b (confine di parola), piuttosto che \A (inizio della stringa) e \W (carattere non word), inoltre non è necessario utilizzare lookahead (lo (?=...)).

Prova: "\bv(\d+)\b" se è necessario acquisire l'int, "\bv\d+\b" in caso contrario.

Modifica: Probabilmente si desidera utilizzare la sintassi stringa prima per regex di Python, r"\bv\d+\b", dal momento che è un personaggio "\b" backspace in una stringa regolare.

22

Abbastanza semplice. In primo luogo, mettere ancore sul modello:

"^patternhere$" 

Ora, mettiamo insieme il modello:

"^v\d+$" 

Che dovrebbe farlo.

+0

Grazie questo funziona! – astrogirl

2

Basta usare

\bv\d+\b 

O chiusa con ^\bv\d+\b$

per corrispondere del tutto ..

Problemi correlati