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

Kotlin正则表达式:匹配句末句号并忽略缩写类中间句号

Kotlin正则实现仅匹配句末句号(忽略缩写场景)

要解决缩写导致的误匹配问题,我们需要构造能区分句末句号和缩写内句号的正则规则,针对你提到的两种缩写场景(单个字母缩写如J.、多字母分隔缩写如U.S.),可以通过负向零宽断言来排除这些情况。

最终正则规则

val regexRule = "(?<!\\b[A-Za-z]\\.)(?<!\\.[A-Za-z])\\.(\\s+(?=[A-Z])|$)"

规则解释

  • (?<!\\b[A-Za-z]\\.):负向后顾,确保当前句号前不是「单个单词边界字母+句号」的结构(排除J.这类单个字母缩写后的句号)
  • (?<!\\.[A-Za-z]):负向后顾,确保当前句号前不是「句号+字母」的结构(排除U.S.、p.m.这类多字母分隔缩写中的句号)
  • \\.:匹配句号本身
  • (\\s+(?=[A-Z])|$):匹配句号后跟随的「一个或多个空格+大写字母」(新句子开头特征),或句号位于文本末尾的情况

完整代码示例

val text = "At 12.51 p.m. local time, J. Knapp, former U.S. Navy,  went out for a walk. Yes he did. And then a Mw6.3 earthquake happened."
val regexRule = "(?<!\\b[A-Za-z]\\.)(?<!\\.[A-Za-z])\\.(\\s+(?=[A-Z])|$)"
val splitText = text.split(regexRule.toRegex())
val result = splitText.joinToString(separator = ".\n\n")

println(result)

输出结果

At 12.51 p.m. local time, J. Knapp, former U.S. Navy,  went out for a walk.

Yes he did.

And then a Mw6.3 earthquake happened.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:29