leb*_*lev 23 java regex split abbreviation
我写了这段代码,分割字符串并将其存储在字符串数组中: -
String[] sSentence = sResult.split("[a-z]\\.\\s+");
Run Code Online (Sandbox Code Playgroud)
但是,我添加了[az],因为我想处理一些缩写问题.但后来我的结果显示如下: -
此外,当埃弗雷特试图在基础数学中指导他们时,他们证明了他们没有回应
我看到我丢失了split函数中指定的模式.我可以失去这段时间,但丢掉这个词的最后一个字母会扰乱它的意思.
有人可以帮助我吗,此外,有人可以帮我处理缩写吗?例如,因为我根据句点分割字符串,所以我不想丢失缩写.
Jul*_*and 52
解析句子远非一项微不足道的任务,即使对于像英语这样的拉丁语言也是如此.像你在问题中概述的那种天真的方法经常会失败,在实践中它将被证明是无用的.
更好的方法是使用配置了正确Locale 的BreakIterator.
BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it.";
iterator.setText(source);
int start = iterator.first();
for (int end = iterator.next();
end != BreakIterator.DONE;
start = end, end = iterator.next()) {
System.out.println(source.substring(start,end));
}
Run Code Online (Sandbox Code Playgroud)
得到以下结果:
Mar*_*ers 11
在所有情况下都很难使正则表达式工作,但为了解决您的直接问题,您可以使用lookbehind:
String sResult = "This is a test. This is a T.L.A. test.";
String[] sSentence = sResult.split("(?<=[a-z])\\.\\s+");
Run Code Online (Sandbox Code Playgroud)
结果:
This is a test
This is a T.L.A. test.
Run Code Online (Sandbox Code Playgroud)
请注意,有些缩写不以大写字母结尾,例如缩写,先生等等.而且还有一些句子不会以句号结尾!
| 归档时间: |
|
| 查看次数: |
28859 次 |
| 最近记录: |