string substitutions

Mike Dean klaatu at evertek.net
Sat Feb 23 21:22:11 CET 2002


* Bob Roberts <bobnotbob at byu.edu> [2002-23-02 11:52]:
> What would be a good way to replace every one or more spaces (" ") in
> a string with just one space?  Or replace any number of newlines with
> just one?

This is a perfect job for Python's regular expression (RE) library. For
example:

import re

# Replace all occurances of one or more spaces with a single space
re.sub(' +', ' ', mystring)
# Ditto for newlines
re.sub('\n+', '\n', mystring)
# And, to combine the two into one operation:
re.sub('(\n+| +)', '\1', mystring)

If you perform this operation more than once, precompile your RE with
re.compile, like so:

spnl = re.compile('(\n+| +)')
spnl.sub('\n', mystring)

That will speed up the substitution, quite a bit for more complicated
expressions (don't know how much of a factor there is with a simple
expression like this, but there will be some speed improvement).

HTH,
Mike




More information about the Python-list mailing list