Python Regex Question

Tim Chase python.list at tim.thechases.com
Wed Oct 29 20:01:17 CET 2008


> I need a regex expression which returns the start to the x=ANIMAL for
> only the x=Dog fragments so all my entries should be start ...
> (something here) ... x=Dog .  So I am really interested in fragments 1
> and 3 only.
> 
> My idea (primitive) ^start.*?x=Dog doesn't work because clearly it
> would return results
> 
> start
> x=Dog  # (good)
> 
> and
> 
> start
> x=Cat
> stop
> start
> x=Dog # bad since I only want start ... x=Dog portion

Looks like the following does the trick:

 >>> s = """start      #frag 1 start
... x=Dog # frag 1 end
... stop
... start    # frag 2 start
... x=Cat # frag 2 end
... stop
... start     #frag 3 start
... x=Dog #frag 3 end
... stop"""
 >>> import re
 >>> r = re.compile(r'^start.*\nx=Dog.*\nstop.*', re.MULTILINE)
 >>> for i, result in enumerate(r.findall(s)):
...     print i, repr(result)
...
0 'start      #frag 1 start\nx=Dog # frag 1 end\nstop'
1 'start     #frag 3 start\nx=Dog #frag 3 end\nstop'

-tkc










More information about the Python-list mailing list