python - 使用 python 正则表达式查找以逗号分隔的键=值对,但将引号部分保留在一起

标签 python regex key

如何从以下字符串中获取键值对:

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/

相关文章:

python - 创建 csv 文件中特定行的字典

bash - 随机语法错误!?使用包含 "operand"的键进行关联数组扩展

python - 将大量 Python 列表的数据导出到文本文件的最快方法

python - 保存多个不同的交易示例(trans1、trans2、trans3)+写入json

regex - 检查字符串是否以 CMake 中的名称结尾

c# - 正则表达式至少找到两个字符之一

java - 使用 Gson 从 JSON 对象获取键名

python - PyCharm 重新格式化代码不会将行换行至指定长度

python - 用户警告 : Failed to initialize NumPy: module compiled against API version 0xf but this version of numpy is 0xe (Triggered internally at

javascript - 使用简单的正则表达式验证浏览器上传文件名和扩展名