4

我正在尝试替换句子终止符的所有实例,例如“。”、“?”和“!”,但我不想替换“博士”之类的字符串。和“先生”。

我尝试了以下方法:

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();
}

该代码将从文本摘录中提取所有*复合句和单个句子,删除所有标点符号和无关空格。
*有一些例外...

4

2 回答 2

2

你需要像这样使用负面的lookbehind而不是负面的lookahead

String x = "dr. house.";
System.out.println(x.replaceAll("(?<!mr|mrs|ms|dr)(\\s*[\\.\\?\\!]\\s*)","\n"));

列表mr/dr/ms/mrs也不应该在字符类中。

于 2012-12-06T05:20:36.923 回答
-1

您将需要一个完整的字母组合列表,这些字母组合可以放在前面.。然后,您可以将dr.and mr.(以及任何其他允许的组合)替换为独特的东西,例如dr28dsj458sjand mr28dsj458sj。理想情况下,您应该检查您的临时替代值是否存在于文档中的其他位置。然后遍历并删除所有句子终止符,然后再次遍历并再次替换出现的28dsj458sjwith .

于 2012-12-06T05:19:09.447 回答