[Python-de] zwei regex zu einem verbinden
Torsten P.
topic2k at googlemail.com
Mi Dez 18 19:26:42 CET 2013
Hallo Gruppe,
ich möchte in einem Text zählen, wieviele Zeichen von '#' oder '0' (XOR) nach einem Punkt folgen. Ich wollte dies mit re.search angehen.
Wenn ich entweder auf '#' oder '0' prüfe klappts.
t1 = 'some text .000 more text'
t2 = 'some text .### more text'
re.search('\.(0*)', t1).groups() >>> ('000',)
re.search('\.(0*)', t2).groups() >>> ('',)
re.search('\.(#*)', t1).groups() >>> ('',)
re.search('\.(#*)', t2).groups() >>> ('###',)
Nun würde ich aber gerne statt zwei regex nur einen haben. Leider bin ich da nicht erfolgreich. Folgendes habe ich schon probiert:
re.search('\.(#*)|(0*)', t1).groups() > (None, '')
re.search('\.(#*)|(0*)', t2).groups() > (None, '')
re.search('\.(0*)|(#*)', t1).groups() > (None, '')
re.search('\.(0*)|(#*)', t2).groups() > (None, '')
re.search('\.(#|0)*', t1).groups() > ('0',)
re.search('\.(#|0)*', t2).groups() > ('#',)
re.search('\.(0|#)*', t1).groups() > ('0',)
re.search('\.(0|#)*', t2).groups() > ('#',)
re.search('\.(#*|0*)', t1).groups() > ('',)
re.search('\.(#*|0*)', t2).groups() > ('###',)
re.search('\.(0*|#*)', t1).groups() > ('000',)
re.search('\.(0*|#*)', t2).groups() > ('',)
Einen Teilerfolg habe ich mit:
>>> re.search('\.(?P<sign>0|[#])(?P<cnt>(?P=sign)*)', t1).groups()
('0', '00')
>>>
>>> re.search('\.(?P<sign>0|[#])(?P<cnt>(?P=sign)*)', t2).groups()#
('#', '##')
Kann mir jemand sagen, wie das richtig sein muss bzw. wo mein Fehler ist?
Danke,
Torsten
Mehr Informationen über die Mailingliste python-de