找不到正确的正则表达式代码来提取确切的数字
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]+
我使用网络抓取提取了一个关于 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]+