【问题标题】:extracting key value pairs from a string containing escaped characters从包含转义字符的字符串中提取键值对
【发布时间】:2014-04-17 01:00:09
【问题描述】:

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

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

【问题讨论】:

    标签: python regex escaping key


    【解决方案1】:

    知道了。

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

    【讨论】:

      【解决方案2】:

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

      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\\=\\='}
      

      这消除了对= 字符进行转义的需要。

      【讨论】:

      • 有趣。适用于我提供的数据,但任何有空格的东西都会中断。例如:key3=Web 日志
      • @Jared:当然,但是无论如何你都应该使用合适的解析器。对于许多这样的格式,使用稍微调整的shlex parser 会产生奇迹,只要您引用值部分。 key3="Web Log" 可以轻松支持;例如,supervisord 就是这样做的。
      • 好的,感谢您提供的资源和您在此问题上的帮助。你摇滚。
      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多