Actually, you should get that anyway...

"""
|
    Alternation, or the ``or'' operator. If A and B are regular
expressions, A|B will match any string that matches either "A" or "B".
| has very low precedence in order to make it work reasonably when
you're alternating multi-character strings. Crow|Servo will match
either "Crow" or "Servo", not "Cro", a "w" or an "S", and "ervo".
"""

So, for each letter in that string, it's checking to see if any letter
matches 'A' or 'B' ...
the engine steps through one character at a time.
sorta like - 

for letter in s:
     if letter == 'A':
        #Do some string stuff
     elif letter == 'B':
        #do some string stuff


i.e. 

k = ['A','B', 'C', 'B']

for i in range(len(k)):
    if k[i] == 'A' or k[i]=='B':
       k[i]==13

print k

[13, 13, 'C', 13]

You can limit substitutions using an optional argument, but yeah, it
seems you're expecting it to examine the string as a whole.


Check out the example here - 
http://www.amk.ca/python/howto/regex/regex.html#SECTION000320000000000000000

Also

http://www.regular-expressions.info/alternation.html

Regards, 

Liam Clarke


On Thu, 10 Mar 2005 09:09:13 +1300, Liam Clarke <[EMAIL PROTECTED]> wrote:
> Hi Mike,
> 
> Do you get the same results for a search pattern of 'A|B'?
> 
> 
> On Wed, 9 Mar 2005 11:11:57 -0800, Mike Hall
> <[EMAIL PROTECTED]> wrote:
> > I'm having some strange results using the "or" operator.  In every test
> > I do I'm matching both sides of the "|" metacharacter, not one or the
> > other as all documentation says it should be (the parser supposedly
> > scans left to right, using the first match it finds and ignoring the
> > rest). It should only go beyond the "|" if there was no match found
> > before it, no?
> >
> > Correct me if I'm wrong, but your regex is saying "match dog, unless
> > it's followed by cat. if it is followed by cat there is no match on
> > this side of the "|" at which point we advance past it and look at the
> > alternative expression which says to match in front of cat."
> >
> > However, if I run a .sub using your regex on a string contain both dog
> > and cat, both will be replaced.
> >
> > 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.
> >
> >
> > On Mar 8, 2005, at 6:47 PM, Danny Yoo wrote:
> >
> > >
> > >
> > >>
> > >> Regular expressions are a little evil at times; here's what I think
> > >> you're
> > >> thinking of:
> > >>
> > >> ###
> > >>>>> import re
> > >>>>> pattern = re.compile(r"""dog(?!cat)
> > >> ...                    | (?<=dogcat)""", re.VERBOSE)
> > >>>>> pattern.match('dogman').start()
> > >> 0
> > >>>>> pattern.search('dogcatcher').start()
> > >
> > >
> > >
> > > Hi Mike,
> > >
> > > Gaaah, bad copy-and-paste.  The example with 'dogcatcher' actually does
> > > come up with a result:
> > >
> > > ###
> > >>>> pattern.search('dogcatcher').start()
> > > 6
> > > ###
> > >
> > > Sorry about that!
> > >
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor@python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
> 
> --
> 'There is only one basic human right, and that is to do as you damn well 
> please.
> And with it comes the only basic human duty, to take the consequences.
> 


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to