我正在尝试替换句子终结符的所有实例,例如'。','?'和'!',但我不想替换像“dr”这样的字符串。和“先生。”。
我尝试了以下内容:
text = text.replaceAll("(?![mr|mrs|ms|dr])(\\s*[\\.\\?\\!]\\s*)", "\n");
......但这似乎不起作用。任何建议,将不胜感激。
<小时/> 修改:在此处提供反馈并进行一些调整后,这是解决我问题的有效方法。
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();
}
代码将从文本摘录中提取所有*复合和单个句子,删除所有标点符号和无关的空格。
* 有一些例外......
答案 0 :(得分:2)
你需要使用负面的lookbehind而不是像这样的负向前瞻
String x = "dr. house.";
System.out.println(x.replaceAll("(?<!mr|mrs|ms|dr)(\\s*[\\.\\?\\!]\\s*)","\n"));
mr/dr/ms/mrs
的列表也不应该在字符类中。
答案 1 :(得分:-1)
您需要拥有.
之前允许的字母组合的完整列表。然后,您可以使用dr.
和mr.
之类的独特内容替换dr28dsj458sj
和mr28dsj458sj
(以及任何其他允许的组合)。理想情况下,您应该检查文档中的其他地方是否存在临时替换值。然后浏览并删除所有句子终止符,然后再次检查并再次将28dsj458sj
替换为.
。