You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中按多字符组合分隔符分割字符串的问题咨询

问题根因

你代码出错的核心原因是正则表达式中的.是特殊元字符,默认匹配除换行符外的任意单个字符,你没有对它做转义处理,所以代码里的. \n\n|.\n\n不是匹配字面量的句号加换行组合,而是匹配「任意字符+空格+两个换行」或者「任意字符+两个换行」,才会把示例中Yes \n\n里的s被.匹配到,最终把Yes拆成了Ye。

修正方案

如果要匹配字面量的句号,需要用转义符\把.转义为\.,同时可以用?匹配可选的空格,简化正则写法:

import re    
text = 'Thanks.\n\n This is the first time. \n\n Yes \n\n indeed.'
# \. 匹配字面量句号,? 表示前面的空格可选,覆盖两种分隔符场景
res = re.split(r'\. ?\n\n', text)
print(res)

运行后输出结果和你预期一致:

['Thanks', ' This is the first time', ' Yes \n\n indeed.']

如果不需要拆分后每个元素开头的多余空格,遍历结果调用strip()处理即可。

支持问号、感叹号的拆分规则

可以实现按?|!|.加两个换行的规则拆分,把三种标点放到正则字符集[.!?]中即可:

# 直接拆分,会吃掉句尾的标点
res = re.split(r'[.!?] ?\n\n', text)

# 如果需要保留句尾的标点,使用零宽后行断言,不会消耗标点字符
res = re.split(r'(?<=[.!?]) ?\n\n', text)

内容的提问来源于stack exchange,提问作者hao3 feng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:48:01