split parameter line with quotes

teddyber teddyber at gmail.com
Fri Jan 11 17:32:04 EST 2008


i know this is some kind of bad design but the problem is that i
receive this string from a jabber server and i cannot do anything to
change this. i should try to verify if that's correct implementation
of jabber protocol still...

On 11 jan, 22:02, "Russ P." <Russ.Paie... at gmail.com> wrote:
> 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