在文本文件中创建带句号(句点)的新行

2024-10-16 17:17:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文本文件中有一个句子,我想用python显示它,但是我希望在每一个句号(句点)之后都有一个新行开始显示。在

例如我的段落是

"Dr. Harrison bought bargain.co.uk for 2.5 million pounds, i.e. he
paid a lot for it. Did he mind? John Smith, Esq. thinks he didn't.
Nevertheless, this isn't true... Well, with a probability of .9 it
isn't."

但我希望它显示如下

^{pr2}$

在句子中出现的其他句点,如网站地址中的“Dr.”、“Esq”、“.9”以及省略号中的前两个点,这一点变得越来越困难。在

对于文本文件中存在的其他句点,我不确定如何处理这个问题,有人能帮忙吗?谢谢您。在

“你的任务是编写一个程序,给定一个文本文件的名称就可以编写 将每个句子放在单独的行中。“<;--任务集


Tags: forit句子段落he文本文件isnco
2条回答

当且仅当点后跟空格和大写字母时,才可以添加换行符。它不能解决所有的问题,但是结合使用像“Dr.”这样的例外字典,你可以做得很好,尽管不是完美的。在

更新: 我所说的字典指的是Python字典和单词列表like this one 我没有找到任何包含最常见缩写的可下载文件,所以恐怕你得自己做一个。在

这将对您的文本执行以下操作:

text = "Dr. Harrison bought bargain.co.uk for 2.5 million pounds, i.e. he "\
       "paid a lot for it. Did he mind? John Smith, Esq. thinks he didn't. "\
       "Nevertheless, this isn't true... Well, with a probability of .9 it "\
       "isn't."

import re

pat = ('(?<!Dr)(?<!Esq)\. +(?=[A-Z])')
print re.sub(pat,'.\n',text)

结果

^{pr2}$

但在人类写作这样复杂的事情中,不可能有一个永远不会失败的regex模式。
请注意,例如,我不得不用否定的lookbehind断言来排除Dr.的情况(我对Esq.也做了同样的处理,尽管它在你的文本中并不代表一个问题,因为它后面跟的不是大写字母的thinks
我认为不可能事先将所有类似的情况都放在regex模式中,总有一些未经考虑的情况会在某一天或另一天发生。在

但是这段代码完成了很多期望的工作。我觉得还不错。在

相关问题 更多 >