Python解析键值对字符串提取等号右侧值错误排查
错误原因
你选择的拆分逻辑有问题:原始字符串的键值对之间用逗号分隔,直接按=拆分后,除了最后一个元素,其余每个=后面的内容都会同时包含当前值、逗号、下一个键的名称,你直接提取对应位置的内容没有剔除后面多余的键部分,自然会出现多余内容。
修正方案
优先推荐先拆分键值对再提取值的方案,逻辑清晰,兼容性更强(可以兼容值内包含等号的场景):
key_value_line = 'date=2013-03-15 15:59:21,esname=FHY,esid=FG224B3907501199,es_group=N/A,src=192.168.1.133,spt=52906,dst=173.194.39.154,dpt=80,vdom=root,rcv=11257,proto=http,url=googlesyndication.com,sid=62551133,info=URL has been visited,cat=webfilter' # 先按逗号拆成单个独立的键值对 kv_pairs = key_value_line.split(',') values = [] for kv in kv_pairs: # 每个键值对最多按=拆分1次,避免值内有等号时被误拆分,取第二部分就是目标值 _, val = kv.split('=', 1) values.append(val) print(values)
也可以用正则表达式快速匹配所有值:
import re values = re.findall(r'=([^,]*)', key_value_line) print(values)
两种方案最终都能得到预期结果:['2013-03-15 15:59:21', 'FHY', 'FG224B3907501199', 'N/A', '192.168.1.133', '52906', '173.194.39.154', '80', 'root', '11257', 'http', 'googlesyndication.com', '62551133', 'URL has been visited', 'webfilter']
内容的提问来源于stack exchange,提问作者discordia
相关产品推荐
相关产品推荐

