John Salerno wrote:
> John Salerno wrote:
> > Ok, I've been staring at this and figuring it out for a while. I'm close
> > to getting it, but I'm confused by the examples:
> >
> > (?(id/name)yes-pattern|no-pattern)
> > Will try to match with yes-pattern if the group with given id or name
> > exists, and with no-pattern if it doesn't. |no-pattern is optional and
> > can be omitted.
> >
> > For example, (<)?([EMAIL PROTECTED](?:\.\w+)+)(?(1)>) is a poor email 
> > matching
> > pattern, which will match with '<[EMAIL PROTECTED]>' as well as
> > '[EMAIL PROTECTED]', but not with '<[EMAIL PROTECTED]'. New in version 2.4.
> >
> > group(1) is the email address pattern, right? So why does the above RE
> > match '[EMAIL PROTECTED]'. If the email address exists, does the last part
> > of the RE: (?(1)>) mean that it has to end with a '>'?
>
> I think I got it. The group(1) is referring to the opening '<', not the
> email address. I had seen an earlier example that used group(0), so I
> thought maybe the groups were 0-based.

The groups *are* 0-based.  The 0th group is the whole match, e.g.:

  >>> import re
  >>> m = re.match(r'a(b+)', 'abbbb')
  >>> m.group(0)
  'abbbb'
  >>> m.group(1)
  'bbbb'

And for the pattern you were looking at:

  >>> m = re.match(r'(<)?([EMAIL PROTECTED](?:\.\w+)+)(?(1)>)', '<[EMAIL 
PROTECTED]>')
  >>> m.group(0)
  '<[EMAIL PROTECTED]>'
  >>> m.group(1)
  '<'
  >>> m.group(2)
  '[EMAIL PROTECTED]'

--Ben

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to