2010-10-22 6 views
0

Je l'expression rationnelle suivante:Python - regex sans correspondance

regex = compile("((?P<lastyear>[\dBFUPR]+)/)*((?P<lastseason>[\dBFUPR]+))*(^|-(?P<thisseason>[\dBFUPR]*))") 

que j'utilise pour traiter horce racing form strings. Parfois, la forme d'un cheval ressemblera à ceci "1234", ce qui signifie qu'il n'a pas encore couru cette saison (il n'y a pas de chiffres à droite du "-").

Actuellement, mon expression régulière correspond "" à la fin d'une telle chaîne de formulaire dans le groupe thisseason. Je ne veux pas de ce comportement. Je veux que le groupe soit None dans un tel cas. à savoir

match = regex.match("1234-") 
print match.group("thisseason") #None 

Exemples

string = "1234/123-12" 
match.group("lastyear") #1234 
match.group("lastseason") #123 
match.group("thisseason") #12 

string = "00999F" 
match.group("lastyear") #None 
match.group("lastseason") #None 
match.group("thisseason") #00999F 

string = "12-3456" 
match.group("lastyear") #None 
match.group("lastseason") #12 
match.group("thisseason") #3456 

Répondre

1

Cela fonctionne:

>>> regex = re.compile(r'(?:(?P<lastyear>[\dBFUPR]+)/)?(?:(?P<lastseason>[\dBFUPR]+)-)?(?P<thisseason>[\dBFUPR]+)?') 
>>> regex.match("1234/123-12").groupdict() 
{'thisseason': '12', 'lastyear': '1234', 'lastseason': '123'} 
>>> regex.match("00999F").groupdict() 
{'thisseason': '00999F', 'lastyear': None, 'lastseason': None} 
>>> regex.match("12-").groupdict() 
{'thisseason': None, 'lastyear': None, 'lastseason': '12'} 
>>> regex.match("12-3456").groupdict() 
{'thisseason': '3456', 'lastyear': None, 'lastseason': '12'} 
+0

Le ci-dessus ne correspond pas à quoi que ce soit pour "7463-", ce qui est inexact. – Peter

+0

@Peter: voir ma modification maintenant. – SilentGhost

Questions connexes