如何用Python正则匹配标点后的双引号以拆分句子
用正则拆分SQLite导出的评论文本为单句子行
嘿,我懂你的感受——正则久不用确实容易手生,不过你的场景太友好了:专业编辑过的文本,没有那些乱七八糟的不规范用法,简单正则就能完美解决!
核心思路
专业撰写的文本里,句子的结束标志很清晰:通常是以 .、?、! 结尾,后面跟着一个或多个空白字符(空格居多)。我们可以利用这个规律,用正则匹配这些句子分隔点,把每行评论拆分成独立的句子,再逐行写入新文件。
推荐正则表达式
我推荐用这个后顾断言的正则来做拆分:
(?<=[.!?])\s+
(?<=[.!?]):正向后顾断言,确保我们只在句子结束符(.、!、?)之后进行拆分,不会把句子中间的标点(比如缩写里的点)当成拆分点\s+:匹配一个或多个空白字符(空格、制表符都能覆盖),刚好对应句子之间的分隔空格
实操示例(Python)
假设你的源文件叫 comments.txt,可以用这段代码快速处理:
import re # 读取源文件的所有评论行 with open("comments.txt", "r", encoding="utf-8") as input_file: comment_lines = input_file.readlines() # 拆分并写入单句子文件 with open("sentences.txt", "w", encoding="utf-8") as output_file: for line in comment_lines: # 先去掉每行末尾的换行符,再拆分句子 split_sentences = re.split(r'(?<=[.!?])\s+', line.strip()) # 把每个句子单独写入一行 for sentence in split_sentences: if sentence: # 跳过可能出现的空字符串 output_file.write(f"{sentence}\n")
小提醒
如果你的文本里有少量带点的缩写(比如 Mr.、Dr.),这个正则可能会误拆,但你说文本是专业编辑过的,大概率已经规避了这种情况;如果真遇到了,只需给正则加个排除规则就行,不过当前场景完全不需要~
内容的提问来源于stack exchange,提问作者Jason Thomas
相关产品推荐
相关产品推荐

