【问题标题】:Using regex to extract data from JSON response in Python在 Python 中使用正则表达式从 JSON 响应中提取数据
【发布时间】:2019-09-29 22:59:30
【问题描述】:

我正在尝试在 Python 中使用正则表达式从 JSON 响应中提取字符串,但没有成功。

{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}

我正在努力

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA=== 

来自字符串。但是,字符串中的| 不允许我使用我在 Stack Overflow 上看到的方法,因为它一直缺少|。我将不胜感激。

【问题讨论】:

  • |是正则语言中的特殊字符,所以需要escaped才能匹配。
  • 欢迎来到 SO!发布您的代码尝试很有帮助,因此我们可以帮助指导您。否则,你试过your_json_dict_name["ao"][0].split("|")[3]吗?
  • @ggorlen 你好,这工作完美,没有正则表达式,不知道这样可能非常感谢!

标签: python json regex


【解决方案1】:

好吧,对于初学者来说,我不太明白你为什么不在这个字符串上使用 json.loads,所以你可以将此 json 称为映射并转到“ao”键,然后在里面的字符串上使用正则表达式数组。

但抛开这一点不谈,如果您仍然要从 json 中提取数据作为字符串,您可以在“|”上使用正则表达式组和一些转义(“\”)字符。

看起来像这样:

.?[\"(.?\|){3}(.?)\|.

然后您可以访问第 2 组并获得您想要的结果 假设 json 看起来总是一样的

如果“ao”属性上的数组有超过 1 个字符串,则不会获得第二个值。 因此,我建议先将此字符串转换为 map,然后自行循环每个字符串。

祝你好运

【讨论】:

    【解决方案2】:

    无需使用正则表达式重新发明json.loads()。使用json.loads() 将您的 JSON 字符串解析为字典,并通过索引字典来访问您感兴趣的字符串。提取字符串后,拆分管道字符并访问列表的第三个索引:

    your_json_dict_name["ao"][0].split("|")[3]
    

    这是一个完整的例子:

    import json
    
    raw_json_str = r'{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
    json_dict = json.loads(raw_json_str)
    
    print(json_dict["ao"][0].split("|")[3])
    

    输出:

    b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===
    

    【讨论】:

      【解决方案3】:

      在这里,您可以在字符类中转义特殊字符:

      import re
      text = '{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
      
      
      match = re.search(r'[|]b.*===[|]', text).group()[1:-1]
      print(match)
      

      输出:

      b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 2016-05-04
        • 1970-01-01
        相关资源
        最近更新 更多