La chaîne s
est plus grande, mais je l'ai raccourcie pour simplifier.La chaîne facultative ne correspond pas dans l'expression régulière
>>> import re
>>> s = "Blah. Tel.: 555 44 33 22."
>>> m = re.search(r"\s*Tel\.:\s*(?P<telephone>.+?)\.", s)
>>> m.group("telephone")
'555 44 33 22'
Le code ci-dessus fonctionne, mais si j'Enroulez le regex en ()?
pour la rendre facultative, je ne reçois pas un téléphone.
>>> m = re.search(r"(\s*Tel\.:\s*(?P<telephone>.+?)\.)?", s)
>>> m
<_sre.SRE_Match object at 0x9369890>
>>> m.group("telephone")
Quel est le problème ici? Merci!
Edit:
Cela fait partie d'une plus grande expression régulière dans laquelle je reçois de nombreuses valeurs de chaque ligne d'un gros fichier.
regex = r"^(?P<title>.[^(]+);" \
"\s*(?P<subtitle>.+)\." \
"\s*Tel\.:\s*(?P<telephone>.+?)(\.|;)" \
"\s*(?P<url>(www\.|http://).+?\.[a-zA-Z]+)(\.|;)" \
"(\s*(?P<text>.+?)\.)?" \
"\s*coor:(\s*(?P<lat>.+?),\s*(?P<long>.+?))?$"
ligne Un exemple pourrait être:
l = "Title title; Subtitle, subtitle. Tel.: 555 33 44 11. www.url.com. coor: 11.11111, -2.222222
Et autre ligne exemple:
l = "Title2 title; Subtitle2, subtitle. Tel.: 555 33 44 11. www.url2.com. coor: 44.444444, -6.66666
Il est un regex vraiment grand, donc voilà pourquoi je ne l'ai pas poster.
Vous où droit! Merci à vous et à tous pour votre aide :) – Menda