例如,您发布的段落的第一句用双引号"
引起来,而引号紧接在句号之后: 感染。”
您的正则表达式[.!?]\s{1,2}
正在寻找一个句点,后跟一个或两个空格作为句子终止符,因此它不会被抓住。
可以通过允许使用可选的右引号进行调整以应对这种情况:
sentenceEnders = re.compile(r'''[.!?]['"]?\s{1,2}(?=[A-Z])''')
但是,使用上述正则表达式,您将删除句子的结尾引号。保持它有些棘手,可以使用后向断言来实现:
sentenceEnders = re.compile(r'''(?<=[.!?]['"\s])\s*(?=[A-Z])''')
但是请注意,在许多情况下,基于正则表达式的拆分器会失败,例如:
缩写: “在AB Givental博士的作品中……” -根据您的正则表达式,这将在 “ Dr.” 之后错误地拆分。 , “ A”。 和 “ B”。 (您可以调整单字母的大小写,但是除非对它进行硬编码,否则无法检测到缩写。)
在句子的中间使用感叹号: “……何时,瞧瞧!德夏先生亲自出现……”
使用多个引号和嵌套引号等