split parameter line with quotes

Russ P. Russ.Paielli at gmail.com
Fri Jan 11 16:02:58 EST 2008


On Jan 11, 12:53 pm, "Russ P." <Russ.Paie... at gmail.com> wrote:
> On Jan 11, 10:50 am, teddyber <teddy... at gmail.com> wrote:
>
> > Hello,
>
> > first i'm a newbie to python (but i searched the Internet i swear).
> > i'm looking for some way to split up a string into a list of pairs
> > 'key=value'. This code should be able to handle this particular
> > example string :
>
> > qop="auth,auth-int,auth-conf",cipher="rc4-40,rc4-56,rc4,des,
> > 3des",maxbuf=1024,charset=utf-8,algorithm=md5-sess
>
> > i know i can do that with some regexp (i'm currently trying to learn
> > that) but if there's some other way...
>
> > thanks
>
> The problem is that you are using commas for delimiters at two
> different levels.
>
> I would start by replacing the commas between quotation marks with
> some other delimiter, such as spaces of semicolons. To do that, step
> through each character and keep a count of quotation marks. While the
> count is odd, replace each comma with the selected alternative
> delimiter. While the count is even, leave the comma. [An alternative
> would be to replace the commas outside the quotation marks.]
>
> Once that is done, the problem is straightforward. Split the string on
> commas (using string.split(",")). Then split each item in the list by
> "=". Use the [0] element for the key, and use the [1] element for the
> value (first stripping off the quotation marks if necessary). If you
> need to further split each of the values, just split on whatever
> delimiter you chose to replace the commas.


One more point. Whoever chose the structure of the string you are
parsing didn't do a very good job. If you know that person, you should
tell him or her to use different delimiters at the different levels.
Use commas for one level, and spaces or semicolons for the other
level. Then you won't have to "correct" the string before you parse
it.



More information about the Python-list mailing list