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

如何用Python的re库处理ENDF数据中的特殊科学计数法?

解决ENDF数据特殊科学计数法的Python正则替换方案

要处理ENDF文件里省略e的科学计数法(如1.234-3对应1.234e-3),同时避免误替换负数开头的负号,用Python的re库结合正向预查+捕获组就能实现精准替换。

核心思路

只替换紧跟在数字之后的+或-(也就是指数部分的符号),忽略开头的负号(表示数值本身为负)。

实现代码

import re

def convert_endf_sci_notation(input_str):
    # 匹配数字后的+/-,替换为e+/-
    return re.sub(r'(?<=\d)([+-])', r'e\1', input_str)

正则表达式说明

  • (?<=\d):正向肯定预查,确保匹配的+/-前面是一个0-9的数字,排除开头的负号。
  • ([+-]):捕获组,把指数部分的符号存为分组1。
  • r'e\1':替换时在捕获的符号前加上e,还原标准科学计数法。

测试验证

# 测试用例
test_cases = [
    "1.234-3",       # 正数带负指数
    "-5.122-5",      # 负数带负指数
    "9.876+2",       # 正数带正指数
    "-1.000+0",      # 负数带0指数
    "123-4",         # 整数形式
    ".123-5"         # 无前缀整数的小数
]

for case in test_cases:
    print(f"原字符串: {case:10} → 转换后: {convert_endf_sci_notation(case)}")

输出结果:

原字符串: 1.234-3    → 转换后: 1.234e-3
原字符串: -5.122-5   → 转换后: -5.122e-5
原字符串: 9.876+2    → 转换后: 9.876e+2
原字符串: -1.000+0   → 转换后: -1.000e+0
原字符串: 123-4      → 转换后: 123e-4
原字符串: .123-5     → 转换后: .123e-5

补充说明

这种特殊格式源于Fortran 80字符卡片的存储限制,通过上述正则可以完美兼容所有合法的ENDF数字格式,不会出现误替换负数开头的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:30:00