Reverse string-formatting (maybe?)

Tim Chase python.list at tim.thechases.com
Sun Oct 15 14:59:41 CEST 2006


> My template outside of the '%s' characters contains only commas and
> spaces, and within, neither commas nor spaces. Given that information,
> is there any reason it might not work properly?

Given this new (key) information along with the assumption that 
you're doing straight string replacement (not dictionary 
replacement of the form "%(key)s" or other non-string types such 
as "%05.2f"), then yes, a reversal is possible.  To make it more 
explicit, one would do something like

 >>> template = '%s, %s, %s'
 >>> values = ('Tom', 'Dick', 'Harry')
 >>> formatted = template % values
 >>> import re
 >>> unformat_string = template.replace('%s', '([^, ]+)')
 >>> unformatter = re.compile(unformat_string)
 >>> extracted_values = unformatter.search(formatted).groups()

using '[^, ]+' to mean "one or more characters that aren't a 
comma or a space".

-tkc







More information about the Python-list mailing list