RegExp question
Paul McGuire
ptmcg at austin.rr._bogus_.com
Tue Apr 11 15:20:46 EDT 2006
"Michael McGarry" <michael.mcgarry at gmail.com> wrote in message
news:1144781090.622493.252460 at t31g2000cwb.googlegroups.com...
> Hi,
>
> I would like to form a regular expression to find a few different
> tokens (and, or, xor) followed by some variable number of whitespace
> (i.e., tabs and spaces) followed by a hash mark (i.e., #). What would
> be the regular expression for this?
>
> Thanks for any help,
>
> Michael
>
Using pyparsing, whitespace is implicitly ignored. Your expression would
look like:
oneOf("and or xor") + Literal("#")
Here's a complete example:
from pyparsing import *
pattern = oneOf("and or xor") + Literal("#")
testString = """
z = (a and b) and #XVAL;
q = z xor #YVAL;
"""
# use scanString to locate matches
for tokens,start,end in pattern.scanString(testString):
print tokens[0], tokens.asList()
print line(start,testString)
print (" "*(col(start,testString)-1)) + "^"
print
print
# use transformString to locate matches and substitute values
subs = {
'XVAL': 0,
'YVAL': True,
}
def replaceSubs(st,loc,toks):
try:
return toks[0] + " " + str(subs[toks[2]])
except KeyError:
pass
pattern2 = (pattern + Word(alphanums)).setParseAction(replaceSubs)
print pattern2.transformString(testString)
-----------------
Prints:
and ['and', '#']
z = (a and b) and #XVAL;
^
xor ['xor', '#']
q = z xor #YVAL;
^
z = (a and b) and 0;
q = z xor True;
Download pyparsing at http://pyparsing.sourceforge.net.
-- Paul
More information about the Python-list
mailing list