re Insanity

Duncan Booth duncan.booth at invalid.invalid
Sat Jan 22 12:17:09 CET 2005


Tim Daneliuk wrote:

> 
> I tried this:
> 
>      y=re.compile(r'\[PROMPT:.*\]')
> 
> Which works fine when the text is exactly "[PROMPT:whatever]" but
> does not match on:
> 
>     "something [PROMPT:foo] something [PROMPT:bar] something ..."
> 
> The overall goal is to identify the beginning and end of each [PROMPT...]
> string in the line.
> 

The answer sort of depends on exactly what can be in your optional text:

>>> import re
>>> s =  "something [PROMPT:foo] something [PROMPT:bar] something ..."
>>> y=re.compile(r'\[PROMPT:.*\]')
>>> y.findall(s)
['[PROMPT:foo] something [PROMPT:bar]']
>>> y=re.compile(r'\[PROMPT:.*?\]')
>>> y.findall(s)
['[PROMPT:foo]', '[PROMPT:bar]']
>>> y=re.compile(r'\[PROMPT:[^]]*\]')
>>> y.findall(s)
['[PROMPT:foo]', '[PROMPT:bar]']
>>> 

.* will match as long a string as possible.

.*? will match as short a string as possible. By default this won't match 
any newlines.

[^]]* will match as long a string that doesn't contain ']' as possible. 
This will match newlines.



More information about the Python-list mailing list