12

私は正規表現初心者で、段落を文に分割しようとしています。私の言語では、文の途中でかなりの数の省略形 (例: bl.a.) を使用するため、私がする必要があるのは句読点を探すことであり、その後に 1 つの句が続くという結論に達しました。スペースに続いて、次のような大文字で始まる単語:

[sentence1]...anymore. However...[sentence2]

したがって、次のような段落:

Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang. Det er ikke en bureaukratisk lovtekst blandt så mange andre.

この出力で終了する必要があります。

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang.
[1] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

これではありません:

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. 
[1] => i forbindelse med afskedigelser af større omfang.
[2] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

これの最初の部分を肯定的な後読み機能で行うソリューションを見つけました。

$regexp = (?<=[.!?] | [.!?][\'"]);

その後

$sentences = preg_split($regexp, $paragraph, -1, PREG_SPLIT_NO_EMPTY);

これは素晴らしい出発点ですが、省略形が多いために何度も分割されます。

私はこれをやろうとしました:

(?<=[.!?]\s[A-Z] | [.!?][\'"])

いずれかのすべての出現をターゲットにする

. or ! or ?

スペースと大文字が続きますが、うまくいきませんでした。

私がやろうとしていることを達成する方法があるかどうか、誰かが知っていますか?

4

2 に答える 2

3

このようなパターンの検索はまだ信頼できないようですが、文が改行で終了する可能性があるため、次のことを試してみます

[.\!\?][\s\n\r\t][A-Z] 

私はあなたが実際に先読みを意図していたとは思いませんか?( !? 一緒に、 \ を使用するとエスケープされます - 正規表現に特別な意味を無視するように指示します )

于 2013-04-06T16:24:41.700 に答える