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

如何按句号分割文本而不拆分小数点或人名?

解决人名缩写被误拆分的正则优化方案
  • 先补上原正则遗漏的问号(你要按句号、问号、感叹号拆分,原正则没包含?)
  • 核心是添加负向零宽断言排除人名缩写的场景:匹配标点前不能是单个大写字母(避免N.这种名字缩写点被当作句子结束符)

修改后的正则表达式:

str.split(/(?<!\b[A-Z])[\.\?!]+(?!\d)\s*|\n+\s*/)

关键部分解释

  • (?<!\b[A-Z]):负向后行断言,确保要拆分的标点(.、!、?)前面不是「单词边界+单个大写字母」,直接排除了Frank N. Jackson里的N.这种人名缩写场景
  • (?!\d):保留你原来的负向前瞻断言,排除小数点(比如3.14里的点不会被拆分)
  • [\.\?!]+:统一匹配句子结束的句号、感叹号、问号,支持多个连续标点(比如Hello!!)
  • \s*:匹配标点后的空格,避免拆分结果里带多余空格
  • |\n+\s*:保留按换行拆分的逻辑

测试示例

输入字符串:"Frank N. Jackson is a philosopher. He wrote 'From Metaphysics to Ethics'! What do you think?"
拆分结果:
["Frank N. Jackson is a philosopher", "He wrote 'From Metaphysics to Ethics'", "What do you think", ""]

最后用filter(Boolean)处理掉末尾的空字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:35:43