how can I check if group member exist ?

Peter Otten __peter__ at web.de
Fri Jun 21 05:25:02 EDT 2013


Hans wrote:

> Hi,
> 
> I'm doing a regular expression matching, let's say
> "a=re.search(re_str,match_str)", if matching, I don't know how many
> str/item will be extracted from re_str, maybe a.group(1), a.group(2) exist
> but a.group(3) does not.
> 
> Can I somehow check it? something like:
> if exist(a.group(1)): print a.group(1)
> if exist(a.group(2)): print a.group(2)
> if exist(a.group(3)): print a.group(3)
> 
> 
> I don't want to be hit by "Indexerror":
>>>>print a.group(3)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> IndexError: no such group
>>>> 
> 
> thanks!!!

You could catch the exception

for index in itertools.count(1):
    try:
        print a.group(index)
    except IndexError:
        break

but in this case there's the groups() method:

for g in a.groups():
    print g


The interactive interpreter is a good tool to find candidates for a solution 
yourself:

>>> a = re.compile("(.)(.)(.)").search("alpha")
>>> dir(a)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', 
'__format__', '__getattribute__', '__hash__', '__init__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 
'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 
'span', 'start', 'string']

>From the above names lastindex looks promising, too. Can you find out how 
the output of

for i in range(a.lastindex):
    print a.group(i+1)

differs from that of looping over groups()?




More information about the Python-list mailing list