Schif Schaf wrote:
On Feb 7, 12:19 am, "Alf P. Steinbach" <al...@start.no> wrote:
I haven't used regexps in Python before, but what I did was (1) look in the
documentation,
[snip]
<code>
import re

text = (
     "Lorem [ipsum] dolor sit amet, consectetur",
     "adipisicing elit, sed do eiusmod tempor",
     "incididunt ut [labore] et [dolore] magna aliqua."
     )

withbracks = re.compile( r'\[(.+?)\]' )
for line in text:
     print( re.sub( withbracks, r'{\1}', line) )
</code>

Seems like there's magic happening here. There's the `withbracks`
regex that applies itself to `line`. But then when `re.sub()` does the
replacement operation, it appears to consult the `withbracks` regex on
the most recent match it just had.

I suspect Alf's rustiness with regexps caused him to miss the simpler rendition of

  print withbacks.sub(r'{\1}', line)

And to answer those who are reaching for other non-regex (whether string translations or .replace(), or pyparsing) solutions, it depends on what you want to happen in pathological cases like

  s = """Dangling closing]
     with properly [[nested]] and
     complex [properly [nested] text]
     and [improperly [nested] text
     and with some text [straddling
     lines] and with
     dangling opening [brackets
     """
where you'll begin to see the differences.

-tkc




--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to