No offense. I didn't mean there was anything wrong with your way, just that it wasn't "neat". By that, I meant, you were still using lots of for loops and if blocks.
Justin Azoff wrote: > danielx wrote: > > I'm surprised no one has mentioned neat-er, more pythonic ways of doing > > this. I'm also surprised no one mentioned regular expressions. Regular > > expressions are really powerful for searching and manipulating text. I suppose I put those things too close together. I meant I was surprised for each of the two Separate (non)occurances. > [snip] > > I'm surprised you don't count my post as a neat and pythonic way of > doing this. I'm also surprised that you mention regular expressions > after neat and pythonic. While regular expressions often serve a > purpose, they are rarely neat. > > > Anyway, here's my solution, which does Not use regular expressions: > > > > def reindent(line): > > ## we use slicing, because we don't know how long line is > > head = line[:OLD_INDENT] > > tail = line[OLD_INDENT:] > > ## if line starts with Exactly so many spaces... > > if head == whitespace*OLD_INDENT and not tail.startswith(' '): > > return whitespace*NEW_INDENT + tail > > else: return line # our default > [snip] > > This function is broken. Not only does it still rely on global > variables to work, it does not actually reindent lines correctly. Your It's just an illustration. > function only changes lines that start with exactly OLD_INDENT spaces, > ignoring any lines that start with a multiple of OLD_INDENT. Maybe I misread, but that's what I thought he wanted. Did you not see my code comments expressing that very intent? Anyway, it wouldn't be that hard to modify what I gave to do multiple replacement: just add a recursive call. > > -- > - Justin -- http://mail.python.org/mailman/listinfo/python-list