You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中实现仅拆分句点分隔的句子而不拆分域名?

解决Python中分割句子但不拆分域名的问题

这问题我之前处理文本的时候也碰到过,用正则表达式就能精准搞定!核心思路是区分句子结束的句点域名里的句点:句子的句点后面通常紧跟大写字母(英文句子开头惯例)或带空格的大写字母,而域名里的句点前后都是小写字母/数字,且后面不会直接跟大写字母。

具体实现代码

我们可以利用正则的零宽断言来定位句子的分割位置,这样既能分割句子,又不会破坏域名的结构,还能保留句点在句子末尾:

import re

def split_sentences(text):
    # 匹配句点后面紧跟大写字母(或带空格的大写字母)的位置,进行分割
    return re.split(r'(?<=\.)(?=\s?[A-Z])', text)

# 测试示例
test_text = "Janice is my mother.She is a good mother. I love google.com and shop.tk very much."
result = split_sentences(test_text)
for idx, sentence in enumerate(result, 1):
    print(f"句子{idx}: {sentence.strip()}")

代码解释

  • (?<=\.):正向回顾断言,确保我们分割的位置前面是一个句点;
  • (?=\s?[A-Z]):正向前瞻断言,确保分割位置后面是可选的空格+大写字母,这符合英文句子开头的特征;
  • re.split分割这个位置,不会去掉原句中的句点,完美保留句子的完整性。

测试结果

运行上面的代码,输出会是:

句子1: Janice is my mother.
句子2: She is a good mother.
句子3: I love google.com and shop.tk very much.

可以看到,google.comshop.tk完全保留,没有被拆分,而句子被正确分割开了。

额外说明

如果你的文本里有特殊情况(比如包含缩写如Mr.Smith,而你不想把它拆成两个句子),可以稍微调整正则,加入对缩写的判断,但这需要你根据具体的缩写规则来扩展。不过针对你提出的需求,上面的代码已经完全够用啦!

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

火山引擎 最新活动