In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] wrote: > The code > > for text in open("file.txt","r"): > print text.replace("foo","bar")[:-1] > > replaces 'foo' with 'bar' in a file, but how do I avoid changing text > inside single or double quotes? For making changes to Python code, I > would also like to avoid changing text in comments, either the '#' or > '""" ... """' kind.
The first part of what you describe isn't too bad, here's some code that seems to do what you want: import re def replace_unquoted(text, src, dst, quote = '"'): r = re.compile(r'%s([^\\%s]|\\[\\%s])*%s' % (quote, quote, quote, quote)) out = '' ; last_pos = 0 for m in r.finditer(text): out += text[last_pos:m.start()].replace(src, dst) out += m.group() last_pos = m.end() return out + text[last_pos:].replace(src, dst) Example usage: print replace_unquoted(file('foo.txt', 'r').read(), "foo", "bar") It's not the most elegant solution in the world. This code does NOT deal with the problem of commented text. I think it will handle triple quotes, though I haven't tested it on that case. At any rate, I hope it may help you get started. Cheers, -M -- Michael J. Fromberger | Lecturer, Dept. of Computer Science http://www.dartmouth.edu/~sting/ | Dartmouth College, Hanover, NH, USA -- http://mail.python.org/mailman/listinfo/python-list