python re 正则表达式提取token

该博客介绍了如何在regex101网站上进行正则表达式测试和调试,特别是在处理JSON数据时提取'token'字段。通过非贪婪匹配避免了过度匹配的问题,展示了如何编写正则表达式`'token':'*.*?'.*?'`来提取token。随后,使用Python的re模块找到匹配项,并通过替换、拼接和json.loads()将结果转化为字典。博客强调了正确使用非贪婪匹配在处理文本内容中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

regex101

这个网站支持写正则的时候,匹配文本内容高亮显示,真心不错!

regex101: build, test, and debug regex

 关于正则表达式的语法示例

learn-regex/README-cn.md at master · ziishaned/learn-regex · GitHub

匹配返回的json数据里面的token

示例文本

'token': 'sfdshbGciOiJIUzI1NiJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY'

{'code': 0, 'data': {'head_img': 'test', 'name': 'dasdadasd111', 'token': 'sdfGciOiJIUzI1NiJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY'}, 'msg': None}

{'code': 0, 'data': {'token': 'sfsseyJhbGciOiJIUzI1NiJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY','head_img': 'test', 'name': 'dasdadasd111', }, 'msg': None}

{'code': 0, 'data': {'head_img': 'test','token': 'sfsJIUzI1NiJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY','name': 'dasdadasd111', }, 'msg': None}

{'code': 0, 'data': {'head_img':{'token': 'sdfdssUzI1NiJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY'},'name': 'dasdadasd111'}, 'msg': None}

{'code': 0, 'data': {'head_img':{'data':{'token': 'sfsfsfJ9.eyJzwefwefMzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY'}},'name': 'dasdadasd111'}, 'msg': None}
# 你用的是贪婪匹配.*,就是尽可能多的长的去匹配
# 应该用非贪婪匹配.*?,就是尽可能少的短的去匹配

提取token的正则表达式:

'token':'*.*?'.*?' 

 python 代码

import re
import json

# 要提取的响应内容文本
s ="{'code': 0, 'data': {'head_img': 'test.jpg', 'name': 'dasdadasd111', 'token': 'fsfsdwYy1pbWcub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL3hkY2xhc3NfcHJvL2RlZmF1bHQvaGVhZF9pbWcvMjEuanBlZyIsImlkIjo2NzUwMjIsIm5hbWUiOiJkYXNkYWRhc2QxMTEiLCJpYXQiOjE2NTU2MzkxOTgsImV4cCI6MTY1NjI0Mzk5OH0.5Y8HoH8aTl8PbBj9nEIcDBMehieDaaV7QTrQKxd-kcY'}, 'msg': None}"

# 利用re.findall 正则表达式匹配文本内容
str_re = re.findall(r"'token':'*.*?'.*?'",s)
# 匹配返回的是一个list
print(str_re)

# 这里做下str转换,感觉没必要...
str_data = str(str_re[0])
print(str_data)

# 因为json只支持双引号,所以这里需要做下替换
json_data = str_data.replace("'", '"')
print(json_data)

# 这里继续做下拼接处理,因为我们匹配的token是没有花括号的
json_data = "{"+json_data+"}"
print(json_data)

# 这里利用json的loads方法把str转换成字典
js = json.loads(json_data)
print(type(js))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值