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

如何用Python替换文本缩写且保留空格、换行等格式?

解决Python替换缩写同时保留文本空白结构的问题

原函数的问题在于使用text.split()会将所有空白字符(包括换行、制表符、连续空格)统一作为分隔符,再用' '.join()合并时,所有空白都会被替换成单个空格,彻底破坏原文本的格式结构。

更优雅的实现方式:用正则精准替换

通过正则表达式匹配独立的缩写单词,完全保留原文本的空白结构,具体实现如下:

先导入re模块,编写替换函数:

import re

def replace_acronyms(replacers, text):
    # 构建正则模式:匹配独立的缩写单词,转义特殊字符避免正则语法冲突
    acronym_pattern = re.compile(
        r'\b(' + '|'.join(re.escape(acronym) for acronym in replacers.keys()) + r')\b',
        re.IGNORECASE  # 可选参数:忽略大小写,匹配AAA、Aaa等形式的缩写
    )
    # 回调替换:匹配到缩写就替换为对应全称,其余内容原样保留
    return acronym_pattern.sub(lambda match: replacers[match.group(0).lower()], text)

代码细节说明

  1. 正则模式设计:

    • \b是单词边界,确保只匹配独立的缩写单词(不会误匹配包含缩写的长单词,比如不会把aaab里的aaa替换)
    • re.escape(acronym)处理缩写中可能存在的特殊字符(如a.b这类带点的缩写),避免触发正则语法错误
    • 若不需要不区分大小写匹配,直接移除re.IGNORECASE参数即可,此时需保证字典键与文本中缩写的大小写完全一致
  2. 替换逻辑:
    使用re.sub的回调函数,每次匹配到缩写时,将匹配内容转为小写(对应字典的小写键),取出对应的全称替换;未匹配到的内容(包括所有换行、制表符、连续空格)完全保留原格式。

结合你的表单代码使用

if request.method == "POST":
    text = request.POST.get("note")
    processed_text = replace_acronyms(replacers, text)

适配标点场景的调整

如果缩写可能紧跟标点(如aaa.、aaa,),可以修改正则模式适配:

acronym_pattern = re.compile(
    r'(?<![a-zA-Z])(' + '|'.join(re.escape(acronym) for acronym in replacers.keys()) + r')(?![a-zA-Z])',
    re.IGNORECASE
)

这样即使缩写旁边有标点,也能正确匹配替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:50:28