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()? -- http://mail.python.org/mailman/listinfo/python-list