[Tutor] regular expression question
Kent Johnson
kent37 at tds.net
Thu Mar 10 00:02:03 CET 2005
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
More information about the Tutor
mailing list