Python 从包含转义字符的字符串中提取键值对

Python 从包含转义字符的字符串中提取键值对,python,regex,escaping,key,Python,Regex,Escaping,Key,这个问题的基础是: 我想得到包含转义出的等号的键值对 r = "key1=value1 key2=value2 request=http://www.pandora.com/json/music/artist/justin-moore?explicit\\=false uri=3DLoiRDsBABCAA9FvE1htRg\\=\\=" regex = re.compile(r"\b(\w+)=([^=]*)(?=\s\w+=\s*|$)") d = dict(regex.findall(r)

这个问题的基础是:

我想得到包含转义出的等号的键值对

r = "key1=value1 key2=value2 request=http://www.pandora.com/json/music/artist/justin-moore?explicit\\=false uri=3DLoiRDsBABCAA9FvE1htRg\\=\\="
regex = re.compile(r"\b(\w+)=([^=]*)(?=\s\w+=\s*|$)")
d = dict(regex.findall(r))
print(d)

{'key2': 'value2', 'key1': 'value1'}

我似乎无法得到带有转义等号的值。我很确定([^=]*)部分是错的。我想我需要匹配任何不包含下一个键的内容=

不要使用正则表达式来进行字符串拆分:

dict(s.split('=', 1) for s in r.split())
演示:

这样就不需要转义
=
字符。

明白了

regex = re.compile(r"\b(\w+)=(.*?)(?=\s\w+=\s*|$)")

有趣。适用于我提供的数据,但任何带空格的都会中断。例如:key3=WebLog@Jared:当然可以,但无论如何,您都应该使用正确的解析器。对于许多这样的格式,如果您引用值部分,则使用稍微调整的值将产生奇迹
key3=“Web日志”
可以轻松支持;例如,
supervisorORD
就是这样做的。@Jared:请看一个例子好的,谢谢您在这个问题上提供的资源和帮助。你太棒了。
regex = re.compile(r"\b(\w+)=(.*?)(?=\s\w+=\s*|$)")