微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用“”分割字符串 点,同时处理缩写

如何用正则表达式删除需要消失的点,然后用空格替换其余的点呢?正则表达式可以看起来像(?<=(^|[.])[\\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 World
This Is A Test
The SWAT Team
SwaT 
SwaT 1
2001 A Space Odyssey

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

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

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

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


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

解决方法

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

输入示例

你好,世界

这是一个测验

SWATTeam

扑打

扑打

2001.太空漫游

想要的输出:

你好,世界

这是一个测验

特警队

扑打

扑打

2001太空漫游

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。