如何解决用“”分割字符串 点,同时处理缩写
如何用正则表达式删除需要消失的点,然后用空格替换其余的点呢?正则表达式可以看起来像(?<=(^|[.])[\\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 举报,一经查实,本站将立刻删除。