Utilisation des expressions régulières
Bonjour.
Sur une ligne de type complexe, j'essaie de décomposer en groupes de données parlantes.
J'essaie avec les expressions régulières, mais pour l'instant ne parviens pas au résultat escompté.
Un exemple valant mieux qu'un long discours :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import re
line = '46.193.16.35 - hguelbeye [02/Nov/2017:00:59:35 +0100] "POST <a href="http://www.dalloz.fr:80/documentation/SessionHandler.svc/GetSessionLive?id=RECUEIL/IR/1996/0884&ctxt=0_YSR0MT1sZSBqdWdlIGV0IGFwcGxpY2F0aW9uIGRlIGxhIGxvaSBldHJhbmdlcmXCp3gkc2Y9cGFnZS1yZWNoZXJjaGU=&ctxtl=0_cyRwYWdlTnVtPTHCp3MkdHJpZGF0ZT1GYWxzZcKncyRzb3J0PcKncyRzbE5iUGFnPTIwwqdzJGlzYWJvPUZhbHNlwqdzJHBhZ2luZz1UcnVlwqdzJG9uZ2xldD3Cp3MkZnJlZXNjb3BlPUZhbHNlwqdzJHdvSVM9RmFsc2U=&nrf=0_TGlzdGU=" target="_blank">http://www.dalloz.fr:80/documentatio...nrf=0_TGlzdGU=</a> HTTP/1.1" 200 587'
# Expression régulière pour les log.
# On est censé récupérer ip, login, datetime, url, path
regex = "^(?P<ip>(?:[0-9]{1,3}\.){3}[0-9]{1,3}) - " \
"(?P<login>[0-9a-zA-Z]*) .*" \
"\[(?P<datetime>.*)\].*connect\?session=.*&url=" \
"https?://w*\.?(?P<url>.[^/]*)/(?P<path>.*) HTTP/1.1.*"
chain1 = re.compile(regex)
match1 = chain1.match(line)
if match1:
url = match1.group("url")
dt1 = match1.group("datetime")
P_login = match1.group("login") |
Je n'arrive pas à comprendre pourquoi ça ne marche pas.
Quelqu'un a une idée ?
Une autre solution pour décomposer ce genre de ligne ?
Merci de votre aide ;-)