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