replacing multiple instances of commas beginning at specific position

Bengt Richter bokr at oz.net
Tue Nov 15 18:49:52 EST 2005


On Tue, 15 Nov 2005 08:26:22 GMT, Dennis Lee Bieber <wlfraed at ix.netcom.com> wrote:

>On 14 Nov 2005 09:43:57 -0800, "striker" <striker at trip.net> declaimed
>the following in comp.lang.python:
>
>> 
>> What would be the best approach to replace all instances of multiple
>> commas with just one comma, except for the 4 commas prior to ADMNSRC?
>>
>	Simplify the problem... Start by rephrasing... Since ADMNSRC is to
>always have four commas leading up to it (at least, as I understand your
>statement of intent), you could consider three of those to be part of
>the string. So...
>
>	Phase one: split on commas, tossing out any null fields
>	Phase two: replace "ADMNSRC" with ",,,ADMNSRC"
>	Phase three: rejoin the parts that remain.
>
>	Doing this efficiently may be another matter but...
>
>data = [ "one, two, three,,,,four,,,,ADMNSRC, five,,,,six",
>         "one, two, three,four,,,,,,,,ADMNSRC,,,,,,eighteen,   and so
>on" ]
>
>result = []
>for ln in data:
>    wds = [x.strip() for x in ln.split(",") if x]
>    for i in range(len(wds)):
>        if wds[i] == "ADMNSRC":
>            wds[i] = ",,,ADMNSRC"
>    result.append(",".join(wds))
>
>print result

Or if data is from a single file read, maybe (untested beyond what you see ;-)

 >>> data = """\
 ... one, two, three,,,,four,,,,ADMNSRC, five,,,,six
 ... one, two, three,four,,,,,,,,ADMNSRC,,,,,,eighteen,   and so on
 ... """
 >>> import re
 >>> rxc = re.compile(',+')
 >>> result = ',,,ADMNSRC'.join(','.join(rxc.split(s)) for s in data.split(',,,ADMNSRC'))
 >>> print result
 one, two, three,four,,,,ADMNSRC, five,six
 one, two, three,four,,,,ADMNSRC,eighteen,   and so on

Regards,
Bengt Richter



More information about the Python-list mailing list