Seite 1 von 1

Regex {min,max} quantifier sind nicht greedy

Verfasst: Freitag 9. März 2012, 17:12
von jb300180
die Regex {min,max} quantifier sind nicht greedy obwohl sie es sein sollten
im Beispiel gibt match "23456" aus - also reluctant/non-greedy

die Doku sagt {min,max} sei greedy während {min,max}? non-greedy sei
http://docs.python.org/library/re.html# ... ion-syntax

in diesem Beispiel funktioniert das leider nicht:

Code: Alles auswählen

import re
str="a string with numbers 123456 for regex"

c56 = re.compile(r".*(\d{5,6}).*")
print ("{5,6} is supposed 2 b greedy", c56.match(str).group(1))

c6 = re.compile(r".*(\d{6}).*")
print (c6.match(str).group(1))
getestet mit python 2.5.4. und 3.2.2.

Habe ich vielleicht etwas falsch gemacht?
Handelt es sich um einen Bug?

Re: Regex {min,max} quantifier sind nicht greedy

Verfasst: Freitag 9. März 2012, 17:55
von nomnom
Ich denke, dass das erste „.*“ die eins „tilgt“, du müsstest also statt „allem“ (.) nur „nicht-zahlen“ matchen oder dem „.*“ ein Fragezeichen nachstellen, damit das Muster „.*“ als „greedy“ aufgefasst wird.

So funktioniert es:

Code: Alles auswählen

In [1]: TEXT = "a string with numbers 123456 for regex" # eigentlich sind es "digits"

In [10]: re.findall(r"\d{5,6}", TEXT)
Out[10]: ['123456']

In [15]: re.match(r"\D*(\d{5,6})\D*", TEXT).groups() # ich finde die erste Variante aber besser ...
Out[15]: ('123456',)

Re: Regex {min,max} quantifier sind nicht greedy

Verfasst: Freitag 9. März 2012, 18:00
von jb300180
Exzellent!
du hast recht vielen Dank regex-champ :wink: