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

Python正则表达式匹配PyBobyQa日志f值缺失问题求助

优化PyBobyQa日志中f值的正则提取方案

问题核心

你的现有正则表达式无法覆盖PyBobyQa日志中所有函数评估的f值格式(比如整数、科学计数法、带正负号的数值),导致仅能匹配部分记录。

优化后的正则表达式

针对PyBobyQa日志的常见格式,使用以下正则可以捕获所有合法的f值:

r"\s*Function evaluation \d+: f = ([+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)"

正则说明

  • \s*: 匹配行首可能存在的任意空格(处理日志缩进)
  • Function evaluation \d+: 匹配固定前缀,\d+匹配任意数字的评估次数
  • : f = : 匹配中间的标识文本,若日志中空格数量不固定,可替换为:\s*f\s*=\s*匹配任意空格
  • ([+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?): 捕获f值,支持:
    • 正负号([+-]?)
    • 整数(如987、0)
    • 小数(如0.1234、-12.34)
    • 科学计数法(如5.678e-03、1.0000e+02)

完整代码示例

import re

# 读取日志文件(替换为你的日志路径)
with open("pybobyqa_log.txt", "r", encoding="utf-8") as f:
    log_content = f.read()

# 编译正则(提升重复匹配效率)
f_value_pattern = re.compile(r"\s*Function evaluation \d+: f = ([+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)")

# 提取所有f值并转为浮点数
all_f_values = [float(match.group(1)) for match in f_value_pattern.finditer(log_content)]

# 输出结果
print("所有函数评估的f值:")
for idx, f_val in enumerate(all_f_values, 1):
    print(f"评估{idx}: {f_val}")

调试建议

如果仍有匹配不到的行,可将无法匹配的日志行单独提取,检查是否存在格式变体(比如前缀文本差异、特殊字符),再针对性调整正则的对应部分。

内容的提问来源于stack exchange,提问作者Andrew Lindsay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:12