如何将大字符串分割为200-400字符的小段且不拆分单词?
按完整单词分割字符串为指定长度区间的分段
实现思路
- 先将原始文本按空格拆分为独立单词列表,从根源避免拆分单个单词
- 逐个累加单词,实时计算当前分段的总长度(包含单词间的空格)
- 当添加下一个单词会导致总长度超过400字符时,将当前累加内容作为一段;若当前分段长度已在200-400范围内,也可提前结束该段
- 处理剩余单词,组成最后一段(即使长度不足200也保留)
代码示例(Python)
def split_text_by_words(text, min_len=200, max_len=400): words = text.split() segments = [] current_segment = [] current_length = 0 for word in words: # 计算添加当前单词后的总长度(含空格:当前长度+单词长度+1个空格,第一段无需开头空格) next_length = current_length + len(word) + (1 if current_segment else 0) if next_length <= max_len: current_segment.append(word) current_length = next_length else: # 当前分段长度达标则保存,再开启新分段 if current_length >= min_len: segments.append(' '.join(current_segment)) current_segment = [word] current_length = len(word) else: # 单个单词超长的特殊情况,直接作为单独一段(可按需调整逻辑) segments.append(word) current_segment = [] current_length = 0 # 加入最后剩余的分段 if current_segment: segments.append(' '.join(current_segment)) return segments # 测试用例 original_text = "这里替换成你的长文本内容,比如包含大量完整单词的字符串,确保每个分段都不会拆分单词,长度控制在200到400字符之间。Unbowed, Unbent, Unbroken. It's ten thousand miles from Winterfell to Casterly Rock, but the road is full of perils and stories waiting to be told. Every step brings new challenges, every word carries weight, and we must ensure that no single word is split when we divide this text into manageable chunks for sending." result = split_text_by_words(original_text) for idx, seg in enumerate(result, 1): print(f"分段{idx}(长度:{len(seg)}):{seg}")
说明
- 代码默认最小长度200、最大长度400,可通过参数灵活调整
- 兼容单个单词长度超过最大限制的场景(直接设为单独一段,可根据需求修改处理逻辑)
- 每段长度会尽可能接近400但不超限,同时严格保证单词完整性
内容的提问来源于stack exchange,提问作者pini
相关产品推荐
相关产品推荐

