用引号拆分参数行

你好,
首先,我是Python的新手(但我搜索了我发誓的互联网).
我正在寻找某种方法将字符串分成对的列表
'key = value'.此代码应该能够处理此特定
示例字符串:
qop =" auth,auth-int,auth-conf",cipher =" rc4-40,rc4-56,rc4,des,des,
3des",maxbuf = 1024,charset = utf-8,算法= md5-sess
我知道我可以用一些纠正措施来做到这一点(我目前正在尝试学习
那)但是,如果还有其他方法...
谢谢

# 回答1


1月11日,下午1:50,泰迪伯<泰迪...@gmail.comwrote:
这是非常规的,使用评估也不安全.
[('算法','md5-sess'),('maxbuf',1024),('charset','utf-8'),
('cipher','rc4-40,rc4-56,rc4,des,3des'),('qop','auth,auth-int,auth-
conf')]]
...
算法= md5-sess
MAXBUF = 1024
charset = UTF-8
cipher = rc4-40,rc4-56,rc4,des,3des
qop = auth,auth-int,auth-conf
要进行安全评估,请看一下http://aspn.activestate.com/aspn/coo.../recipe/364469
-n
# 回答2


Teddyber写道:
看看Shlex模块.您也许可以摆脱困境
反对并说服它在逗号上分裂.但是,老实说,
如果分隔逗号是空间,上面的解析将容易得多
反而.
J
# 回答3


在1月11日,20:28,Nanjundi 这是非常规的,并且使用评估也不安全. 1024,charset =" utf-8",算法=" md5-sess"'
感谢那.问题是我没有charset =" utf-8",但是
charset = UTF-8.有时"有时不!
# 回答4


在1月11日,12:50*下午,泰迪伯 这些引用的字符串在您尝试分裂时肯定是讨厌的
逗号.这是使用pyparsing的解决方案 - 注意参数字段
底部的访问方法.此外,附带的解析行动
整数将在分析时间将字符串转换为int.
有关pyparsing的更多信息,请访问http://pyparsing.wikispaces.com.
- 保罗
来自pyparsing incort Word,nums,alpha,引用引用,\
DeLimitedList,文字,Charsnotin,dict,group,\
删除Quotes
arg =''qop =" auth,auth-int,auth-conf",
cipher =" rc4-40,rc4-56,rc4,des,3des",
maxBuf = 1024,charset = utf-8,算法= md5-sess''''
#格式为:键=值组的划界列表,值为值
#引号的字符串,整数或未引用的字符串到达
下一个
# ',' 特点
钥匙=字(alpha)
eq = literal(" =").suppress()
integer = word(nums).setParseaction(lambda t:int(t [0]))
quotedstring.setparseaction(remove Quotes)
其他= charsnotin(",")
val =引用|整数|其他
#解析每个键= val arg纳入自己的组
arglist = delimitedList(group(key + eq + val))
args = arglist.parsestring(arg)
#打印解析结果
打印args.aslist()
打印
#通过包装添加类似dict的检索功能
表达
arglist = dict(delimitedList(group(key + eq + val))))))
args = arglist.parsestring(arg)
#打印修改后 结果,使用dump()(也显示dict条目)
打印args.dump()
#按密钥名称访问值
打印" keys =",args.keys()
打印" cipher =",args [" cipher"]
#或可以像对象的属性一样访问它们
打印" maxbuf =",args.maxbuf
印刷:
[['qop','auth,auth-int,auth-conf'],['cipher','rc4-40,rc4-56,rc4,des,des,des,
3des'],['Maxbuf',1024],['charset','utf-8'],['algorithm','md5--
sess']]]
[['qop','auth,auth-int,auth-conf'],['cipher','rc4-40,rc4-56,rc4,des,des,des,
3des'],['Maxbuf',1024],['charset','utf-8'],['algorithm','md5--
sess']]]
- 算法:MD5-SESS
-Charset:UTF-8
-Cipher:RC4-40,RC4-56,RC4,DES,3DES
-MAXBUF:1024
-QOP:auth,auth-int,auth-conf
键= ['maxbuf','cipher','charset','算法','qop']
MAXBUF = 1024
cipher = rc4-40,rc4-56,rc4,des,3des
# 回答5


1月11日,上午10:50,泰迪伯<泰迪...@gmail.comwrote:
问题是您在两个处使用逗号.
不同的级别.
我将首先用引号之间的逗号
其他一些定界符,例如半殖民地的空间.为此,步骤
通过每个角色,并保留引号的数量.而
计数很奇怪,用选定的替代品替换每个逗号
定界符.虽然计数甚至是,请留下逗号. [替代
将替换引号之外的逗号.]
一旦完成,问题就很简单.将字符串分开
逗号(使用String.split(",")).然后按列表中的每个项目
" =".为键使用[0]元素,然后将[1]元素用于
值(如有必要,首先删除引号).如果你
需要进一步拆分每个值,只需分开
定界符您选择更换逗号.
# 回答6


1月11日,下午12:53," Russ P." 问题是您在两个处使用逗号.
不同的级别.
我将首先用引号之间的逗号
其他一些定界符,例如半殖民地的空间.为此,步骤
通过每个角色,并保留引号的数量.而
计数很奇怪,用选定的替代品替换每个逗号
定界符.虽然计数甚至是,请留下逗号. [替代
将替换引号之外的逗号.]
一旦完成,问题就很简单.将字符串分开
逗号(使用String.split(",")).然后按列表中的每个项目
" =".为键使用[0]元素,然后将[1]元素用于
值(如有必要,首先删除引号).如果你
需要进一步拆分每个值,只需分开
定界符您选择更换逗号.

再点.谁选择了弦的结构
解析做得不好.如果你知道那个人,你应该
告诉他或她在不同级别上使用不同的定系数.
将逗号用于一个级别,另一个逗号或半隆
等级.那么您不必"纠正" 解析之前的E字符串
它.

# 回答7


哇!这是完美的这个shlex模块!感谢您指出这个!
在1月11日,20:36,Joshua Kugler 看看Shlex模块.您也许可以摆脱困境
反对并说服它在逗号上分裂.但是,老实说,
如果分隔逗号是空间,上面的解析将容易得多
反而.
j
# 回答8


我知道这是某种不良设计,但问题是我
从Jabber服务器接收此字符串,我无能为力
更改此.我应该尝试验证这是否是正确的实施
jabber协议仍然...
1月11日,22:02," Russ P." 再点.谁选择了弦的结构
解析做得不好.如果你知道那个人,你应该
告诉他或她在不同级别上使用不同的定系数.
将逗号用于一个级别,另一个逗号或半隆
等级.然后,您不必在解析之前"更正"字符串
它.
# 回答9


这是我目前的解决方案:
t = shlex.shlex(数据)
t.wordchars = t.wordchars +"/ + .-"
r ='''
而1:
token = t.get_token()
如果不代表:
休息
如果不token ==',':r = r+令牌
else:r = r +''
self.debug(r,'ok')
对于r.split('')中的一对:
键,值= pair.split('=',1)
打印(键+':'+值)
我知道这还不是完美的,但是我已经走了很长一段路
不良的PHP习惯! :o)
感谢您的帮助!
在1月11日,23:30,泰迪伯<泰迪...@gmail.comwrote:
# 回答10


Teddyber写道:
也许您喜欢:
3des",maxbuf = 1024,charset = utf-8,算法= md5-sess'
for i在x中,如果i!='"").split('='))] [:1],[k [:-1]或k in k in in in
(j.split(',')for j in''.join(i in x in x If I!=''').split('='))] [1:])))))))))))))
{'Maxbuf':['1024'],'cipher':['rc4-40','rc4-56','rc4','des',''
3des'],'charset':['utf-8'],'算法':['MD5-sess'],'qop':[''
auth','auth-int','auth-conf']}

标签: python

添加新评论