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

表单文本读取与变量替换异常:为何仅捕获首尾行且替换错误

问题排查与修复方案

错误根源

  1. 定位缺失:find()仅返回第一个{/}的索引,rfind()仅返回最后一个的索引,完全没处理中间的{ phone }占位符,导致它直接保留在结果中。
  2. 切片逻辑混乱:
    • part_3 = text[d + 1:u]中,d是最后一个}的位置,u是第一个{的位置,后者远小于前者,切片结果为空字符串。
    • part_4 = text[p:-2]的取值范围错误,导致tg_phone和tg_vacancy被直接拼接在一起。
  3. 冗余变量:u和p的重复定义完全没用,属于无效代码。

修复方法

最优方案:用字符串format方法(简洁可靠)

Python内置的格式化语法可自动匹配所有占位符,彻底避免手动切片的错误:

# 假设settings.tg_message的原始内容为:
# "Name : {name}\nPhone : {phone}\nVacancy : {vacancy}"
text = str(settings.tg_message)

# 直接传入变量替换所有占位符
text_message = text.format(name=tg_name, phone=tg_phone, vacancy=tg_vacancy)

备选方案:正则批量替换(适配复杂格式)

如果占位符有多余空格或格式不统一,用正则表达式批量替换:

import re

text = str(settings.tg_message)
# 匹配{ 变量名 }格式的占位符(兼容前后空格)
placeholder_pattern = re.compile(r'\{\s*(\w+)\s*\}')

# 定义变量映射表
replacements = {
    'name': tg_name,
    'phone': tg_phone,
    'vacancy': tg_vacancy
}

# 批量替换占位符
text_message = placeholder_pattern.sub(lambda match: replacements.get(match.group(1), match.group()), text)

手动分割方案(仅作原理演示,不推荐)

如果一定要手动处理,可通过分割拼接实现,但扩展性极差:

text = str(settings.tg_message)
# 按占位符分割后逐个拼接变量
segments = text.split('{ name }')
seg1 = segments[0] + tg_name
seg2 = segments[1].split('{ phone }')
seg3 = seg2[0] + tg_phone
seg4 = seg2[1].split('{ vacancy }')
text_message = seg3 + seg4[0] + tg_vacancy + seg4[1]

修复后效果

执行上述任一方案,都会得到预期输出:

Name : john
Phone : +359557664848
Vacancy : courier

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:43:38