Regex Question

Gabriel Genellina gagsl-py at yahoo.com.ar
Tue Jan 16 21:25:52 EST 2007


At Tuesday 16/1/2007 16:36, Bill  Mill wrote:

> > py> import re
> > py> rgx = re.compile('1?')
> > py> rgx.search('a1').groups()
> > (None,)
> > py> rgx = re.compile('(1)+')
> > py> rgx.search('a1').groups()
>
>But shouldn't the ? be greedy, and thus prefer the one match to the
>zero? This is my sticking point - I've seen that plus works, and this
>just confuses me more.

Perhaps you have misunderstood what search does.
search( pattern, string[, flags])
         Scan through string looking for a location where the regular 
expression pattern produces a match

'1?' means 0 or 1 times '1', i.e., nothing or a single '1'.
At the start of the target string, 'a1', we have nothing, so the re 
matches, and returns that occurrence. It doesnt matter that a few 
characters later there is *another* match, even if it is longer; once 
a match is found, the scan is done.
If you want "the longest match of all possible matches along the 
string", you should use findall() instead of search().


-- 
Gabriel Genellina
Softlab SRL 


	

	
		
__________________________________________________ 
Preguntá. Respondé. Descubrí. 
Todo lo que querías saber, y lo que ni imaginabas, 
está en Yahoo! Respuestas (Beta). 
¡Probalo ya! 
http://www.yahoo.com.ar/respuestas 




More information about the Python-list mailing list