我需要一个正则表达式来查找所有以句子结尾的句号,并忽略句子句号的中间部分,例如缩写. 注意:Iunderstand有许多other种变体,可能不可能解释所有这些变体,因此问题的焦点将是:至少下面的样例是否可以用正则表达式解决?

假设我有这样一段文字.下面的正则表达式规则查找后跟空格的任何句点匹配.但它也与PM相匹配.和美国-我如何才能忽略单词中的句号:a)由全部由句点分隔的字符组成?(如U.S.)和b)前面只有一个字符的句点(如J.). 这是在Kotlin .

        val text = "下午12点51分 当地时间,J. 克纳普,前美国 Navy,  went out for a walk. 是的,他说了. 然后发生了Mw6.3级地震."
        val regexRule = "\\.\\s+"
        val splitText = text.split(regexRule.toRegex())
        val result = splitText.joinToString( separator = ".\n\n")

仅使用该规则的当前结果:

下午12点51分

当地时间,J.

克纳普,前美国

海军,出go 散步了.

是的,他说了.

然后发生了Mw6.3级地震.

推荐答案

您可以使用

val regexRule = "(?<!\\b\\p{L})\\.(?<!\\d.(?=\\d))(?!\\s*\$)\\s*"

请看regex demo.

Details:

  • (?<!\b\p{L})-负向后看:不允许在当前位置的左侧紧靠前有单词边界的单个字母
  • \.-a点
  • (?<!\d.(?=\d))-点不应位于数字之间
  • (?!\s*$)-紧靠右侧,不应有任何零个或更多空格+字符串结尾
  • \s*-任意零个或更多空格.

Kotlin相关问答推荐

如何在Jetpack Compose中的列中渲染图像

等待下一个值时暂停Kotlin Coroutine

使用数据存储首选项Kotlin Jetpack Compose

在intellij中使用kotlin符号和floordiv

如何避免使用公共类实现内部接口

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

如何在数据类中删除空格 (String)?

创建包含 3 个相同项目的列表/使用返回类型重复

Jetpack Compose:当状态从另一个活动改变时强制重组

Kotlin SAM/功能接口抛出 AbstractMethodError

如何将字符串格式化为电话号码kotlin算法

如何在 android jetpack compose 中相互重叠列表项?

在java代码中使用kotlin库

如何使用kotlin中的反射查找包中的所有类

添加抽象的私有getter和公共setter的正确方法是什么?

如何让数据类在Kotlin中实现接口/扩展超类属性?

Kotlin 中更好的回调方法是什么?侦听器与高阶函数

使用 rxbinding 时我应该取消订阅吗?

Kotlin var lazy init

如何在 spring-boot Web 客户端中发送请求正文?