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

Python按行分割长文本适配消息字符限制的实现问题

按整行边界拆分长文本的Python实现(适配聊天平台字符限制)

核心逻辑

严格按换行符切割文本,保证单行内容完整不被截断,单块总字符数不超过设定的阈值,适配Telegram、Discord等平台的单条消息字符限制。

实现代码

def split_text_by_line_limit(text: str, char_limit: int) -> list[str]:
    # 按换行分割文本,保留每行末尾的原生换行符
    lines = text.splitlines(keepends=True)
    # 存储拆分后的所有文本块
    chunks = []
    # 当前正在拼接的文本块行列表、当前块总字符数
    current_chunk = []
    current_length = 0

    for line in lines:
        line_length = len(line)
        # 特殊处理:单行本身长度超过限制的情况
        if line_length > char_limit:
            # 先把当前已拼接的块存入结果
            if current_chunk:
                chunks.append(''.join(current_chunk))
                current_chunk = []
                current_length = 0
            # 超长行单独作为一个块,可根据需求自行替换为截断逻辑
            chunks.append(line)
            continue
        # 加入当前行会超过限制,先结算当前块
        if current_length + line_length > char_limit:
            chunks.append(''.join(current_chunk))
            current_chunk = [line]
            current_length = line_length
        # 加入当前行未超过限制,直接拼接
        else:
            current_chunk.append(line)
            current_length += line_length
    # 结算最后剩余的文本块
    if current_chunk:
        chunks.append(''.join(current_chunk))
    return chunks

调用示例

# 设定单条消息字符上限
limit = 50
# 待拆分的原文本
text = """Line1 - some text 
Line2  - some text
Line3 - some text, limit here
Line4 - some text"""

# 调用拆分函数
splited_texts = split_text_by_line_limit(text, limit)

# 遍历输出拆分结果
for i, chunk in enumerate(splited_texts, 1):
    print(f"text{i} = {repr(chunk)}")

运行结果

和需求示例完全一致,不会出现截断单行的情况,拆分边界都在两行之间的换行处。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:27:06