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

如何用正则表达式替换科学计数法中的+为plus、-为minus?

问题分析与解决

你的代码执行失败主要有两个原因:

  • 正则末尾的$锚定要求匹配内容必须在字符串结尾,但目标1e+1处于字符串中间,无法被匹配到
  • 替换字符串里直接写了[0-9]+[eE]plus[0-9]+,这不是引用匹配到的原内容,而是会把这段固定文本替换进去,无法保留原数字和e/E

正确实现方案

单场景替换(仅处理e/E+)

使用捕获组保留匹配到的前缀(数字+e/E)和后缀数字,替换时引用这些组:

import re
text = 'a1e+1b+a'
result = re.sub(r'([0-9]+[eE])\+([0-9]+)', r'\1plus\2', text)
print(result)  # 输出: a1eplus1b+a

双场景替换(同时处理e/E+和e/E-)

可以用一个正则匹配两种符号,通过回调函数判断符号类型后替换:

import re

def replace_exp(match):
    # 提取捕获组内容:前缀(数字+e/E)、符号、后缀数字
    prefix = match.group(1)
    sign = match.group(2)
    num = match.group(3)
    return f"{prefix}plus{num}" if sign == '+' else f"{prefix}minus{num}"

text = 'a1e+1b2E-3c'
result = re.sub(r'([0-9]+[eE])([+-])([0-9]+)', replace_exp, text)
print(result)  # 输出: a1eplus1b2Eminus3c

核心要点

  • 用()包裹需要保留的内容作为捕获组,替换时通过\1、\2等引用对应组的匹配结果
  • 移除不必要的锚定符号(如$),确保能匹配字符串中任意位置的目标模式
  • 回调函数方式可灵活扩展更多符号的替换逻辑,无需重复编写正则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:42