zwei regex zu einem verbinden

18/12/2013 - 19:26 von Torsten P. | Report spam
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
 

Lesen sie die antworten

#1 Reimar Bauer
18/12/2013 - 19:42 | Warnen spam
Hi

2013/12/18 Torsten P. :
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'




Falls das nur die Fàlle sind die in Betracht kommen, würde ich da
keine regex für nehmen.

text.count('0') or text.count('#')

Gruß
Reimar

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


_______________________________________________
python-de maillist -
https://mail.python.org/mailman/listinfo/python-de

Ähnliche fragen