My glitch. In my mind *finditer()* returned what *findall()*, but it
returns *Match* objects.

The implementation based on *search()*. Seems appropiate.

I just looked in *_sre.c*, and *findall() *uses *search()* and is quite
optimized.

It seems that the good implementation would be to write a *findalliter()* using
the current *findall()* code, and implement *findall() *and *findfirst()* by
calling that.

On Thu, Dec 5, 2019 at 10:31 PM Guido van Rossum <[email protected]> wrote:

> On Thu, Dec 5, 2019 at 6:16 PM Juancarlo Añez <[email protected]> wrote:
>
>> It’s unfortunate that these functions aren’t better matched. Why is there
>>> a simple-semantics find-everything and a match-semantics find-iteratively
>>> and find-one? But I don’t think adding a simple-semantics find-one that
>>> works by inefficiently finding all is the right solution.
>>>
>>
>> The proposed implementation for *findfirst()* is:
>>
>> *return next(finditer(pattern, text, flags=flags), default=default)*
>>
>>
> Um, finditer() returns a Match object, and IIUC findfirst() should return
> a string, or a tuple of groups if there's more than one group. So the
> actual implementation would be a bit more involved. Something like this, to
> match findall() better:
>
>     for match in re.finditer(pattern, text, flags=flags):
>         # Only act on first match
>         groups = match.groups()
>         if not groups:
>             return match.group(0)  # Whole match
>         if len(groups) == 1:
>             return groups[0]  # One match
>         return groups
>     # No match, use default
>     return default
>
> Alternatively, replace the first line with this:
>
>     match = re.search(pattern, text, flags=flags)
>     if match is not None:
>
> (There are apparently subtle differences between re.search() and
> re.findall() -- not sure if they matter in this case.)
>
> And if the point of proposing first is that novices will figure out how to
>>> write first(findall(…)) so we don’t need to add findfirst, then I think we
>>> need findfirst even more, because novices shouldn’t learn that bad idea.
>>>
>>
> Yes, my point exactly.
>
>
>> I posted another thread to argue in favor of *first()*, independently of
>> *findfirst().*
>>
>
> Also agreed, I've observed that as a common pattern.
>
> --
> --Guido van Rossum (python.org/~guido)
> *Pronouns: he/him **(why is my pronoun here?)*
> <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
>


-- 
Juancarlo *Añez*
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/IW7GVG2JL4RWVLPSCCSGUA5ULRZ3WLKP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to