Andy McKenzie wrote: > Hey folks, > > I'm trying to figure out how to do something, and it feels like it > should > be possible, but I can't figure out how. What I want is to define four > expressions, like so: > > (\sNorth\s|\sN\s)(\sSouth\s|\sS\s)(\sEast\s|\sE\s)(\sWest\s|\sW\s) > > And then run a replace such that the groups are replaced, in order, with > "N ", "S ", "E ", or "W " (capital letters, no spaces before). > > It's easy enough to use re.sub to replace ONE of those, and I could just > do > that four times, but is there a way to do all at once? It looks from some > things I've seen like it should be, but I can't figure out how.
re.sub() accepts a function where you can do anything you like: >>> r = re.compile(r"\b(red|yellow|blue)\b") >>> def sub(match): ... s = match.group(1) ... return {"red": "pink", "yellow": "monsters"}.get(s, "starts to cry") ... >>> r.sub(sub, "Who's afraid of red yellow and blue?") "Who's afraid of pink monsters and starts to cry?" >>> re.compile(r"\b(north|south|east|west)\b").sub(lambda m: m.group(1)[:1], ... "north by northwest, south of southpark") 'n by northwest, s of southpark' _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor