[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