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