用“。”分割字符串 (点),同时处理缩写

【字号: 日期:2024-03-01浏览:21作者:雯心
如何解决用“。”分割字符串 (点),同时处理缩写?

如何用正则表达式删除需要消失的点,然后用空格替换其余的点呢?正则表达式可以看起来像(?<=(^|[.])[S&&D])[.](?=[S&&D]([.]|$))。

String[] data = { 'Hello.World', 'This.Is.A.Test', 'The.S.W.A.T.Team','S.w.a.T.', 'S.w.a.T.1', '2001.A.Space.Odyssey' };for (String s : data) { System.out.println(s.replaceAll( '(?<=(^|[.])[S&&D])[.](?=[S&&D]([.]|$))', '') .replace(’.’, ’ ’));}

结果

Hello WorldThis Is A TestThe SWAT TeamSwaT SwaT 12001 A Space Odyssey

在正则表达式中,我需要转义点字符的特殊含义。我可以做到,.但我更喜欢[.]。

所以在正则表达式中,我们有点文字。现在,该点被(?<=...)和包围(?=...)。这些是环视机制的一部分,称为 后向 和 向前 。

由于需要删除的点具有点(或数据的开头^)和一些非空格S,也都是非数字 D字符,因此可以使用进行测试(?<=(^|[.])[S&&D])[.]。

另外,需要删除的点还具有非空格和非数字字符,并且$在其后还有另一个点(可以选择是数据的结尾),可以写为[.](?=[S&&D]([.]|$))

根据需要[S&&D],在字母旁边还可以匹配的字符(例如)!@#$%^&*()-_=+...可以替换[a-zA-Z]为仅英语字母或p{IsAlphabetic}Unicode中的所有字母。

解决方法

我发现这很难解释,因此我将以一些我想实现的目标之前/之后的例子作为开始。

输入示例

你好,世界

这是一个测验

SWATTeam

扑打

扑打

2001.太空漫游

想要的输出:

你好,世界

这是一个测验

特警队

扑打

扑打

2001太空漫游

从本质上讲,我想创建一种能够按点将字符串分割的东西,但同时要处理缩写。

我对缩写的定义是至少具有两个字符(与外壳无关)和两个点,即“ AB”或“ ab”。它 不应该 与数字一起使用,即“ 1.a.”。

我已经使用正则表达式尝试了各种方法,但这并不是我的强项,因此我希望这里的人有我可以使用的任何想法或指针。

相关文章: