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
相关产品推荐
相关产品推荐

