这个问题建立在: get python dictionary from string containing key value pairs
我希望获得包含等于符号转义值的键值对。
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'}
我似乎无法获得带有转义等号的值。我很确定([^ =] *)部分是错误的。我想我需要匹配任何不包含下一个键=
的东西答案 0 :(得分:6)
不要使用字符串拆分工作的正则表达式:
dict(s.split('=', 1) for s in r.split())
演示:
>>> 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\\=\\='}
这样就无需转义=
个字符。
答案 1 :(得分:1)
得到了它。
regex = re.compile(r"\b(\w+)=(.*?)(?=\s\w+=\s*|$)")