4

「.」、「?」、「!」などの文末記号のすべてのインスタンスを置き換えようとしていますが、「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();
}

このコードは、すべて* の複合文と単一文をテキストの抜粋から抽出し、すべての句読点と不要な空白を削除します。
一部例外あり...

4

2 に答える 2

2

このような否定的な先読みではなく、否定的な後読みを使用する必要があります

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。理想的には、一時代替値がドキュメント内のどこにも存在しないことを確認する必要があります。次に、すべての文末記号を調べて削除し、もう一度調べて、の出現箇所をもう一度置き換え28dsj458sjます.

于 2012-12-06T05:19:09.447 に答える