如何从以下字符串中获取键值对:
s='pairs=<A=name,B=2,C="Last, First">'
括号<...>内的部分包含K=V对,各对之间以逗号分隔。值部分可以在引号中包含逗号。
我笨重的解决方案是获取括号之间的部分,找到不在引号中的逗号位置,按找到的逗号位置进行子串,然后用“=”分割键/值,然后将整个内容转换为字典。
正则表达式应该能够以非常简单的方式做到这一点,对吗?
我到目前为止:
re.findall('([A-Z]+[0-9]*)=([^,]*)', s)
但结果并不正确:
[('A', 'name'), ('B', '2'), ('C', '"Last')]
如何忽略引号中的逗号?
编辑
我犯了一个错误。如果 key 可以有小写字母,我原来的正则表达式模式应该不起作用。
我考虑到了这一点,并结合了 eph 和 vks 的解决方案:
s='Pairs=<Aa=name,Bb=2,Cc="Last, First">'
re.findall('([A-Za-z]+[0-9]*)=("[^"]*"|[^,]*)', re.findall(r"<([^>]*)>",s)[0])
而且它似乎有效。
此解决方案有何改进?
最佳答案
re.findall('([A-Z]+[0-9]*)=("[^"]*"|[^,]*)', s)
关于python - 使用 python 正则表达式查找以逗号分隔的键=值对,但将引号部分保留在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34081567/