You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:04:59