10

テキストファイルをピリオドで終わる文に解析しようとしていますが、ホプキンス氏のような名前は、ピリオドの一致に対して誤った警告をスローしています。

正規表現が「。」を識別するもの しかし、「ミスター」ではありません。

おまけに、私も使っています!文の終わりを見つけるために、私の現在の正規表現は/(!/./であり、私の!も組み込んだ答えが欲しいです。

4

4 に答える 4

13

ネガティブルックビハインドを使用します。

(?<!Mr|Mrs|Dr|Ms)\.

これは、、、、またはの後Mrにない場合にのみピリオドに一致しますMrsDrMs

<?
   $str = "This is Mr. Someone and Mrs. Somebody. They are here to meet Dr. SomeoneElse.";
   $str = preg_replace("/(?<!Mr|Mrs|Dr|Ms)\\./", "\n", $str);
   echo($str);
?>
//outputs:
This is Mr. Someone and Mrs. Somebody
 They are here to meet Dr. SomeoneElse
于 2010-06-01T04:08:34.870 に答える
6

これは、単純なメカニズムでは実行できません。それは絶望的に曖昧です。文は略語で終わる場合があり、その場合、2つのピリオドで書かれていません。

UnicodeTR29を参照してください。基本的な実装を含むICUオープンソースライブラリも参照してください。

于 2010-05-31T21:36:34.567 に答える
1

あなたの文の後には常に 2 つのスペースが続きますか? もしそうなら、あなたはそれをチェックすることができます...

/\.\s{2}/

他の文末句読点を組み込む: /[\.\!\?]\s{2}/

次の単語が大文字であるかどうか、その後に改行が続いているかどうかなど、文の終わりの指標となる可能性のある他のものを確認することもできます。上で指摘したように、期間はあいまいすぎます。

于 2010-06-01T02:14:34.973 に答える