Java用排除替换所有正则表达式

Java用排除替换所有正则表达式,java,regex,replaceall,Java,Regex,Replaceall,我正在尝试替换所有句子终止符,例如“.”、“?”和“!”,但我不想替换像“dr.”和“mr.”这样的字符串 我尝试了以下方法: text=text.replaceAll((?![mr | mrs | ms | dr])(\\s*[\\.\.\?\!]\\s*),“\n”) ……但这似乎不起作用。如有任何建议,将不胜感激。 编辑:经过这里的反馈和一点tweeking,这是我问题的有效解决方案 private String convertText(String text) { text = t

我正在尝试替换所有句子终止符,例如“.”、“?”和“!”,但我不想替换像“dr.”和“mr.”这样的字符串

我尝试了以下方法:

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();
}
私有字符串转换文本(字符串文本){
text=text.replaceAll(\\s+,“”);
text=text.replaceAll(“[\n\r\\(\\)\”\,\\:],”);

text=text.replaceAll(“(?i)(?您需要有一个允许在
前面的字母组合的完整列表。然后,您可以替换
dr.
mr.
(以及任何其他允许的组合)使用类似于
dr28dsj458sj
mr28dsj458sj
的独特功能。理想情况下,您应该检查文档中其他地方是否存在临时替换值。然后检查并删除所有句子终止符,然后再次检查并再次使用
替换出现的
28dsj458sj

您需要使用负向后看,而不是像这样使用负向前看

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

System.out.println(x.replaceAll(“(?尝试从异常列表中删除括号,
[]
):
(!mr | mrs | ms | dr)
。它们代表“字符集”,而不是“完整字符串”"当你使用它们时。不知道这是否能完全解决你的问题,但值得一试。尝试这样做有几个问题。你将如何处理像
J.H.罗纳尔多说火车正点运行……他说得对吗?
@Anthill,我已经添加了忽略单个字符的支持,这些字符可以ede一段时间。这是正确的方法吗?还有更简单的方法吗?我离得很近,我隐约记得负面表情。谢谢。我喜欢这种粗制滥造的解决方法,但它可能会降低性能。负面表情是我想要的。谢谢你的时间。