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

时间:2014-03-12 17:23:08

标签: python regex escaping key

这个问题建立在: 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'}

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

的东西

2 个答案:

答案 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*|$)")