2

必要なことを行うためにいくつかの異なる正規表現を組み合わせるのに問題があります。次のテキストがあるとします。

これは文 1 です。これは文 2 です。これは3つです。これは4つです。そして、ペプシの真ん中のセンテンスは 5 です。ほら、6人?そして、これはここで7です!8番目の文はここにあります。そして九が最後です。

「ペプシ」が含まれる文と、その前の 3 つと次の 3 つを抜き出したい。

2文目です!これは3つです。これは4つです。そして、ペプシの真ん中のセンテンスは 5 です。ほら、6人?そして、これはここで7です!8番目の文はここにあります。

これにより、ペプシの文を引き出すことができます。

(?i)((?=[^.\n]*\bpepsi\b)[^.\n]+\.?)

これにより、ペプシ文と次の 3 つの文を引き出すことができます。

(?i)(?m)(?s)((((?=[^.?!\n]*\bpepsi\b)[^.\n]+[.?!]?){1})((?:\\s[a-z]\\.(?:[a-z]\\.)?|.)+?[.?!]+){3})

しかし、前の3つを引き出す方法がわかりません。最初の 3 つを引き出すことができます。

(?i)(?m)(?s)((?:\\s[a-z]\\.(?:[a-z]\\.)?|.)+?[.?!]+){3}

でも、ペプシのセンテンスと前の3つをやろうとすると、どうしてもできません...

そして、文にhtmlが混在する可能性があるため、正規表現が良い選択であるかどうか疑問に思い始めています。これらの正規表現は問題ないと思いますが、よくわかりません。

4

1 に答える 1

0

これはあなたが望むことをするかもしれません (正規表現の例: http://regexr.com?31mm4 )

^(?:.*?[.?!])?(((?:.*?[.?!]){3})(.*?pepsi.*?[.?!])((.*?[.?!]){3}))(.*?)$

7 つのセンテンス (ペプシを含むセンテンスの両側に 3 つ) を $1 に、前の 3 つを $2 に、ターゲットを $3 に、次の 3 つを $4 にキャプチャします。

サンプル データの使用:

($1)Whole capture:  This is sentence two! This is three. This is four. And pepsi middle sentence is here which is five. Here you go six? And this is seven here! Sentence eight is here.
($2)Three before:  This is sentence two! This is three. This is four. 
($3)Target:  And pepsi middle sentence is here which is five. 
($4)Three after:  Here you go six? And this is seven here! Sentence eight is here. 

もちろん、使用している言語によっては、よりクリーンな方法がある可能性があります。

于 2012-07-31T21:26:26.803 に答える