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. -- http://mail.python.org/mailman/listinfo/python-list