Python中从指定格式字符串提取变量值的问题求助
Python字符串提取变量值问题
待处理字符串格式固定(值为随机生成):
"{'_id': ObjectId('636d855390928b1b0392b764'), 'request_id': 99, 'timestamp': '2022-11-10T18:12:19.273576'}"
需要提取以下值并赋值给变量:
objID = "636d855390928b1b0392b764" reqID = 99 timestamp = "2022-11-10T18:12:19.273576"
尝试使用re库时遇到单引号转义问题,试过的代码:
- 提取所有单引号间内容,但不符合需求:
objectID = re.findall(r'\'.*?\'', s)
- 尝试匹配
ObjectId后的内容,但输出结果为'(',加入单引号会报错:
re.findall(r'ObjectId(.+?)', s)
解决方案
针对每个目标值编写精准正则表达式,直接捕获所需内容:
import re # 待处理字符串 s = "{'_id': ObjectId('636d855390928b1b0392b764'), 'request_id': 99, 'timestamp': '2022-11-10T18:12:19.273576'}" # 提取objID:匹配ObjectId('后到下一个'之间的十六进制字符串 objID = re.search(r"ObjectId\('([a-f0-9]+)'\)", s).group(1) # 提取reqID:匹配'request_id': 后的数字,转为整数 reqID = int(re.search(r"'request_id': (\d+)", s).group(1)) # 提取timestamp:匹配'timestamp': '后到下一个'之间的时间字符串 timestamp = re.search(r"'timestamp': '([\dT:.]+)'", s).group(1)
运行结果:
print(objID) # 输出:636d855390928b1b0392b764 print(reqID) # 输出:99 print(timestamp) # 输出:2022-11-10T18:12:19.273576
说明
- 使用
re.search()定位首个匹配项,适合格式固定的场景 - 通过正则括号
()捕获目标内容,.group(1)提取捕获到的结果 - 根据值的类型定制匹配规则:
[a-f0-9]+匹配十六进制字符,\d+匹配数字,[\dT:.]+匹配时间格式字符
内容的提问来源于stack exchange,提问作者user14488986
相关产品推荐
相关产品推荐

