Mike Hall wrote:
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

Reply via email to