Python 如何获取包含内容的字符串的正则表达式

Python 如何获取包含内容的字符串的正则表达式,python,json,re,Python,Json,Re,我有json数据,如下所示: '[ {“最大”:0,“最小”:0,“姓名”:“汤姆”,“年龄”:18}, {“max”:0,“min”:0,“name”:“jack”,“age”:28}, ..... ]' 既然我知道name=tom,那么如何通过正则表达式获取包含tom的dict?或者还有其他更好的方法? 像这样 “{“最大”:0,“最小”:0,“姓名”:“汤姆”,“年龄”:18}” 非常感谢 您可以使用反序列化json文件 然后以通常的方式反复阅读字典。像这样: 导入json 从键入导入

我有json数据,如下所示:

'[
{“最大”:0,“最小”:0,“姓名”:“汤姆”,“年龄”:18},
{“max”:0,“min”:0,“name”:“jack”,“age”:28},
.....
]'
既然我知道name=tom,那么如何通过正则表达式获取包含tom的dict?或者还有其他更好的方法? 像这样

“{“最大”:0,“最小”:0,“姓名”:“汤姆”,“年龄”:18}”

非常感谢

您可以使用反序列化json文件

然后以通常的方式反复阅读字典。像这样:

导入json
从键入导入Dict
以open(“file.json”、“r”)作为f:
数据:Dict=json.load(f)
对于数据中的d:
如果d[“name”]=“tom”:
印刷品(d)
请注意,您的JSON文件格式不正确,带有异常的
。 这是正确的一个:

[
  {
    "max": 0,
    "min": 0,
    "name": "tom",
    "age": 18
  },
  {
    "max": 0,
    "min": 0,
    "name": "jack",
    "age": 28
  }
]

正如其他人也提到的,您的问题看起来使用json更方便

但是,如果您受限于正则表达式,这里有一个简单的正则表达式:

{.+\"name\":\"tom\".+}

假设这是一个目录列表:

lst=[{"max":0,"min":0,"name":"tom","age":18},
 {"max":0,"min":0,"name":"jack","age":28}]
然后

输出

[{'max': 0, 'min': 0, 'name': 'tom', 'age': 18}]

您应该使用内置的
json
模块来解析json文件。
RegEx
不是最好的选择,因为Json是一种标准格式,有很多解析器!您可以在下面看到如何使用内置的Python Json解析器模块

test.json:

[
   {
      "max":0,
      "min":0,
      "name":"tom",
      "age":18
   },
   {
      "max":0,
      "min":0,
      "name":"jack",
      "age":28
   }
]
import json

with open("test.json", "r") as opened_file:
    load_data = json.load(opened_file)
    for elem in load_data:
        if elem["name"] == "tom":
            print(elem)
>>> python3 test.py 
{'max': 0, 'min': 0, 'name': 'tom', 'age': 18}
代码:

[
   {
      "max":0,
      "min":0,
      "name":"tom",
      "age":18
   },
   {
      "max":0,
      "min":0,
      "name":"jack",
      "age":28
   }
]
import json

with open("test.json", "r") as opened_file:
    load_data = json.load(opened_file)
    for elem in load_data:
        if elem["name"] == "tom":
            print(elem)
>>> python3 test.py 
{'max': 0, 'min': 0, 'name': 'tom', 'age': 18}
输出:

[
   {
      "max":0,
      "min":0,
      "name":"tom",
      "age":18
   },
   {
      "max":0,
      "min":0,
      "name":"jack",
      "age":28
   }
]
import json

with open("test.json", "r") as opened_file:
    load_data = json.load(opened_file)
    for elem in load_data:
        if elem["name"] == "tom":
            print(elem)
>>> python3 test.py 
{'max': 0, 'min': 0, 'name': 'tom', 'age': 18}

另一种解决方案,不使用正则表达式,只使用字符串(假设
s
拥有整个数据):


dict_json
将是
{“max”:0,“min”:0,“name”:“tom”,“age”:18}

我认为这应该是可能的,但我只想问,为什么需要使用regex?使用jsonmaybe将JSON转换为Python字典,然后在此字典中搜索会更容易。是的,一方面,为了学习正则表达式的使用,另一方面,可能有很多相似的数据,而不仅仅是一两个元素,遍历的效率会比正则表达式低吗?我不清楚。非常感谢您的回复。我希望我们不必使用遍历,而是使用正则表达式,或者还有其他更方便的方法吗?正如其他答案所指出的,使用
json
模块可能会有所帮助。正则表达式还必须“遍历”整个列表,以便找到将某个参数设置为特定值的所有条目。我不确定资源消耗情况。我想使用内置的过滤函数比首先将数据反序列化为json要快,但是
json
可能是最干净的解决方案……好吧,非常感谢你的帮助,因为我不知道查找正则表达式的具体过程,所以我问了这个问题。非常感谢你的回答。我希望我们不必使用遍历,而是使用正则表达式,或者还有其他更方便的方法吗?谢谢,太酷了!我最终使用了json。如果您考虑这个答案,请标记为已回答