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

如何用Python批量给指定短语加冒号且避免重复添加

实现方案

首先分析原有代码的两个核心问题:

  • 每次替换都基于原始文本present_text,没有保存上一次的修改结果,最终只能生效最后一次匹配的替换操作
  • 没有判断目标短语末尾是否已经存在冒号,容易出现重复添加的问题

推荐实现(正则表达式方案)

用正则匹配目标短语,且匹配时排除短语后已经跟了冒号的情况,同时累计修改结果:

import re

present_text="REASON FOR VISIT Referred by. Elevated PSA. HISTORY OF PRESENT ILLNESS JAMES EVERING is an 81 year old male. CURRENT MEDICATION  AmLODIPine Besylate 5 MG Tablet 90 days, 0 refills PREVIOUS THERAPY: History of education and instructions"
target_phrases = ["HISTORY OF PRESENT ILLNESS","CURRENT MEDICATION","ENCOUNTER NOTES","PREVIOUS THERAPY"]
# 按短语长度从长到短排序,避免短短语先匹配覆盖长短语的情况
target_phrases_sorted = sorted(target_phrases, key=lambda x: len(x), reverse=True)

result = present_text
for phrase in target_phrases_sorted:
    # 正则含义:匹配完整短语,且短语后面没有紧跟冒号
    pattern = re.compile(re.escape(phrase) + r'(?!:)')
    result = pattern.sub(phrase + ':', result)

print(result)

输出验证

运行后输出和预期完全一致:

REASON FOR VISIT Referred by. Elevated PSA. HISTORY OF PRESENT ILLNESS: JAMES EVERING is an 81 year old male. CURRENT MEDICATION: AmLODIPine Besylate 5 MG Tablet 90 days, 0 refills PREVIOUS THERAPY: History of education and instructions

逻辑说明

  • 提前对目标短语按长度倒序排序,避免存在包含关系的短语(比如同时有A和AB)时,短短语先匹配导致长短语无法正常识别
  • 正则用re.escape()处理短语,避免短语里存在正则特殊字符时匹配出错
  • 负向先行断言(?!:)保证只有短语后面没跟冒号的时候才会替换,不会重复加冒号
  • 所有修改都基于上一次处理后的result变量,替换结果可以累计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:06:06