正则表达式 findall 模式

扎眼的阳光 python 201

原文标题Regex findall pattern

我很难想出一个正则表达式来查找 id。例如,在我的文本中,我有多个 ID,但我想提取 Course 和 title 之间的 ID,如下所示:

"_class":"course","id":1565838, "title":"The Complete 2021 Web Development Bootcamp",

我想提取"_class":"course""title"之间的id号。我用什么表达方式?我还想在id之后提取标题。

原文链接:https://stackoverflow.com//questions/71918535/regex-findall-pattern

回复

我来回复
  • Woody1193的头像
    Woody1193 评论

    你为什么要为此使用正则表达式?在我看来,您有一个 JSON 有效负载。如果您想从中获取 ID,它实际上比尝试使用正则表达式要简单得多:

    import json
    
    jsonStr = '{"_class":"course","id":1565838, "title":"The Complete 2021 Web Development Bootcamp"}'
    
    data = json.loads(jsonStr)
    print("ID: " + data["id"]) # ID: 1565838
    

    如果你真的想为此使用正则表达式,那么你可以使用\"id\"\:(?P<id>\d*)\,来匹配 ID 本身。将它与 Python 的 regex 库相结合将为您提供:

    import re
    m = re.search('\"id\"\:(?P<id>\d*)\,', raw)
    print("ID: " + m.group(1)) # ID: 1565838
    

    或者,如果您有多个要查找的 ID,您可以修改它以删除结尾的逗号并通过findall函数进行搜索:

    ids = re.findall('\"id\"\:(?P<id>\d*)', raw)
    print(ids) # ['1565838']
    

    最后,如果您还想要标题,您可以进一步修改它以获得两者:

    m = re.search('\"id\"\:(?P<id>\d*).*\"title\"\:\"(?P<title>[\w\s]*)', raw)
    print(m["id"])    # '1565838'
    print(m["title"]) # 'The Complete 2021 Web Development Bootcamp'
    
    2年前 0条评论