找不到正确的正则表达式代码来提取确切的数字

Couldn't find the right Regex code to extract the exact numbers

我使用网络抓取提取了一个关于 64 位 Steam ID 和好友列表的字符串。我想获得唯一的 steamid,以便我可以将它们存储在不同的文件中。我使用了正则表达式,但我认为我在符号部分有错误。

这是字符串。

{"friendslist":{"friends":[{"steamid":"7656xxxxxxx80x76","relationship":"friend","friend_since":1552765824},{"steamid":"76561xxxxxxx4xx89","relationship":"friend","friend_since":1508594830},{"steamid":"765xxxxxxxxxxx3194","relationship":"friend","friend_since":1543773569}]}}

我这样使用正则表达式:

import re
re.findall("[^:[0-9]+[0-9]+", soup.text)

然而,我得到了这个结果:

['"7656xxxxxxx80x76',
'"76561xxxxxxx4xx89',
'"765xxxxxxxxxxx3194']

我该如何去除数字开头的同上标记 (")?

我做了一个递归函数,它获取数据和密钥然后列出结果:

data = {"friendslist":{"friends":[{"steamid":"7656xxxxxxx80x76","relationship":"friend","friend_since":1552765824},{"steamid":"76561xxxxxxx4xx89","relationship":"friend","friend_since":1508594830},{"steamid":"765xxxxxxxxxxx3194","relationship":"friend","friend_since":1543773569}]}}
def getDataFromNestedDict(data, dictKey):
    if isinstance(data, dict):
        if dictKey in data.keys():
            steamDataList.append(data[dictKey])
        for key, value in data.items():
            if isinstance(value, dict):
                getDataFromNestedDict(value, dictKey)
            elif isinstance(value, list):
                for item in value:
                    getDataFromNestedDict(item,dictKey)

    elif isinstance(data, list):
        for item in data:
            getDataFromNestedDict(item,dictKey)
steamDataList = []
getDataFromNestedDict(data, 'steamid')
print(steamDataList)

输出:

['7656xxxxxxx80x76', '76561xxxxxxx4xx89', '765xxxxxxxxxxx3194']

你有 JSON 个字符串,所以使用模块 json

import json

text = '{"friendslist":{"friends":[{"steamid":"7656xxxxxxx80x76","relationship":"friend","friend_since":1552765824},{"steamid":"76561xxxxxxx4xx89","relationship":"friend","friend_since":1508594830},{"steamid":"765xxxxxxxxxxx3194","relationship":"friend","friend_since":1543773569}]}}'

data = json.loads(text)

for friend in data["friendslist"]['friends']:
    print(friend['steamid'])

结果:

7656xxxxxxx80x76
76561xxxxxxx4xx89
765xxxxxxxxxxx3194

您提供的正则表达式没有达到您的预期。第一个 [ 与第一个 ] 匹配。

使用lookahead/behind查找双引号:

(?<=\")(\d+[x\d]+\d)(?=\")

不过@Furas 是对的。您应该只解析 JSON 。

我建议您遵循@furas 的回答(使用 json 解析器)。

但是如果你真的想使用正则表达式:[^ ["]+[0-9]+[0-9]+