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

