Die Zeichenfolge s
ist größer, aber ich habe es verkürzt zu vereinfachen.Optionale Zeichenfolge nicht im regulären Ausdruck
>>> 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'
Der obige Code funktioniert, aber wenn ich die Regex in ()?
wickeln, um es optional zu machen, ich bekomme kein Telefon.
>>> m = re.search(r"(\s*Tel\.:\s*(?P<telephone>.+?)\.)?", s)
>>> m
<_sre.SRE_Match object at 0x9369890>
>>> m.group("telephone")
Was ist das Problem hier? Vielen Dank!
Edit:
Dieser Teil eines größeren regulären Ausdruck ist, in der ich viele Werte aus jeder Zeile einer großen Datei bin immer.
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>.+?))?$"
Eine Probenleitung könnte sein:
l = "Title title; Subtitle, subtitle. Tel.: 555 33 44 11. www.url.com. coor: 11.11111, -2.222222
und andere Probenleitung:
l = "Title2 title; Subtitle2, subtitle. Tel.: 555 33 44 11. www.url2.com. coor: 44.444444, -6.66666
Es ist eine wirklich große regex, ist also, warum ich es nicht schreiben habe.
Sie waren richtig! Danke dir und allen für die Hilfe :) – Menda