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

Jar*_*red 0 python regex escaping key

这个问题建立在: 从包含键值对的字符串中获取python字典

我想得到包含等于符号转义的值的键值对.

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'}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 6

不要使用字符串拆分工作的正则表达式:

dict(s.split('=', 1) for s in r.split())
Run Code Online (Sandbox Code Playgroud)

演示:

>>> r = "key1=value1 key2=value2 request=http://www.pandora.com/json/music/artist/justin-moore?explicit\\=false uri=3DLoiRDsBABCAA9FvE1htRg\\=\\="
>>> dict(s.split('=', 1) for s in r.split())
{'key2': 'value2', 'key1': 'value1', 'request': 'http://www.pandora.com/json/music/artist/justin-moore?explicit\\=false', 'uri': '3DLoiRDsBABCAA9FvE1htRg\\=\\='}
Run Code Online (Sandbox Code Playgroud)

这消除了转义=字符的需要.