【发布时间】:2012-12-06 05:08:55
【问题描述】:
我正在尝试替换句子终止符的所有实例,例如“.”、“?”和“!”,但我不想替换像“dr.”这样的字符串。和“先生”。
我尝试了以下方法:
text = text.replaceAll("(?![mr|mrs|ms|dr])(\\s*[\\.\\?\\!]\\s*)", "\n");
...但这似乎不起作用。任何建议,将不胜感激。
编辑:在这里的反馈和一些 tweeking 之后,这是我的问题的有效解决方案。
private String convertText(String text) {
text = text.replaceAll("\\s+", " ");
text = text.replaceAll("[\n\r\\(\\)\"\\,\\:]", "");
text = text.replaceAll("(?i)(?<!dr|mr|mrs|ms|jr|sr|\\s\\w)(\\s*[\\.\\?\\!\\;](?:\\s+|$))","\r\n");
return text.trim();
}
代码将从文本摘录中提取所有*复合句和单个句子,删除所有标点符号和无关空格。
*有一些例外......
【问题讨论】:
-
尝试从例外列表中删除括号
[]:(?!mr|mrs|ms|dr)。它们代表“字符集”,而不是您使用它们时的“完整字符串”。不知道它是否能完全解决您的问题,但值得一开始 -
尝试这样做有几个问题。你将如何处理像
J. H. Ronaldo says that the train is running on time.... Is he right?这样的序列。 -
@Anthill,我添加了对忽略句点前面的单个字符的支持。这是正确的方法吗?还有更简单的方法吗?
标签: java regex replaceall