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

Python按句号和问号分割文本并保留分隔符问题求助

问题解决方法

你的代码存在三个关键问题,对应修正方案如下:

  • 文件内容读取错误:readlines()返回的是每行文本组成的列表,直接执行str(data)会把列表转换成带方括号、引号的字符串(例如"['Chapter 16...']"),这并不是你需要处理的原始文本。正确的做法是用read()直接读取完整文本,或者用''.join(data)将行列表拼接成完整字符串。

  • 分割方法使用错误:Python字符串的split()方法不支持正则表达式,你传入的'([.|?])'会被当作普通字符串进行匹配,自然无法实现预期的分割效果。必须使用re模块提供的split()函数来处理正则分割逻辑。

  • 正则表达式编写错误:正则中的.是匹配任意字符的通配符,要匹配字面意义上的句号,需要转义为\.;此外,|在字符集[]中无需使用,直接写[.?]即可匹配句号和问号,外层加上括号([.?])就能保留分隔符本身。

修正后的完整代码:

import re

with open(filename, 'r') as text:
    # 读取完整的文本内容
    data = text.read()
    # 使用re.split执行正则分割,r前缀表示原始字符串,避免转义问题
    split_result = re.split(r'([.?])', data)
    # 过滤掉分割后产生的空字符串或纯空白字符
    split_result = [part for part in split_result if part.strip()]
    for part in split_result:
        print(part)

如果希望将句子与对应的分隔符合并为完整的语句(比如Chapter 16.),可以添加一步分组拼接:

# 每两个元素为一组(句子片段+分隔符)进行合并
complete_sentences = [''.join(split_result[i:i+2]) for i in range(0, len(split_result), 2)]
for sentence in complete_sentences:
    print(sentence.strip())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:45:46