[Python-ideas] Proposed convenience functions for re module

Ron Adam rrr at ronadam.com
Wed Jul 22 10:02:54 CEST 2009



Steven D'Aprano wrote:
> Following the thread "Experiment: Adding "re" to string objects.", I 
> would like to propose the addition of two convenience functions to the 
> re module:
> 
> 
> def multimatch(s, *patterns):
>     """Do a re.match on s using each pattern in patterns, 
>     returning the first one to succeed, or None if they all fail."""
>     for pattern in patterns:
>         m = re.match(pattern, s)
>         if m: return m
> 
> def multisearch(s, *patterns):
>     """Do a re.search on s using each pattern in patterns, 
>     returning the first one to succeed, or None if they all fail."""
>     for pattern in patterns:
>         m = re.search(pattern, s)
>         if m: return m
> 
> 
> The rationale is to make the following idiom easier:
> 
> 
> m = re.match(s, pattern1)
> if not m:
>     m = re.match(s, pattern2)
>     if not m:
>         m = re.match(s, pattern3)
>         if not m:
>             m = re.match(s, pattern4)
> if m:
>     m.group()
> 
> 
> which will become:
> 
> m = re.multimatch(s, pattern1, pattern2, pattern3, pattern4)
> if m:
>     m.group()
> 
> 
> Is there any support or objections to this proposal? Any comments?


One of the needs I've run across is to enable the program user (possibly a 
non-programmer) to do logical searches on data.

It would be nice if the search patterns specified by the program user could 
be used directly by the functions.  Search functions of this type would 
take patterns that are more like what you would use for google or yahoo 
searches instead of the more complex language re requires.

Ron









More information about the Python-ideas mailing list