A simple example will show what I mean:
>>> import re >>> x = re.compile(r"(A) | (B)") >>> s = "X R A Y B E" >>> r = x.sub("13", s) >>> print r X R 13Y13 E
...so unless I'm understanding it wrong, "B" is supposed to be ignored if "A" is matched, yet I get both matched. I get the same result if I put "A" and "B" within the same group.
The problem is with your use of sub(), not with |.
By default, re.sub() substitutes *all* matches. If you just want to substitute the first match, include the optional count parameter:
>>> import re >>> s = "X R A Y B E" >>> re.sub(r"(A) | (B)", '13', s) 'X R 13Y13 E' >>> re.sub(r"(A) | (B)", '13', s, 1) 'X R 13Y B E'
BTW, there is a very handy interactive regex tester that comes with Python. On Windows, it is installed at
C:\Python23\Tools\Scripts\redemo.py
Kent
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor