-1

次のテキストの単語「blah」の 3 番目、6 番目、9 番目、12 番目、15 番目、18 番目、..... などのみに一致し、1 番目、2 番目、4 番目、5 番目、7 番目を無視する正規表現を探しています。 、8th、....など。正規表現は、blahのみの3xオカレンスと一致する必要があります

The Band blah The Band blah  blah Up On Cripple Creek (2000 Digital Remaster) blah 2000 blah Greatest Hits blah The Band blah  blah The Weight (2000 Digital Remaster) blah 2003 blah Rhythm Of The Rain blah The Cascades blah  blah Rhythm Of The Rain (LP Version) blah 2005 blah Chronicle Volume One blah Creedence Clearwater Revival blah  blah Who'll Stop the Rain blah 1976 blah The Complete Sun Singles, vol. 1 blah Johnny Cash blah  blah I Walk the Line blah 2001 blah Greatest Hits blah Bob Seger blah  blah Against The Wind blah 1980 blah Their Greatest Hits blah The Eagles blah  blah Lyin' Eyes blah 1975 blah Johnny Horton's Greatest Hits blah Johnny Horton blah  blah North To Alaska 

前もって感謝します。

参考までに、Hive でこの正規表現を使用します

4

3 に答える 3

2

素敵でコンパクト:

(?:blah.*?){2}(blah)
于 2013-03-31T00:29:49.187 に答える
0

(コメントであなたが言ったことから)以前の両方の回答があなたが望むものではないと思うので、ここにも私のスタンプを置きます。
免責事項: 3 番目の blah だけをキャッチする効率的な方法はないと思いますが、それでも可能です。
ステップ 1:文字列を逆にします。任意の長さの後読みが必要になりますが、これは使用できません。ただし、文字列を逆にし、任意の長さの先読みを使用して、それらを取得する必要があります。
ステップ 2:以下の正規表現は、必要なものをキャッチする必要があります。

/halb(?=(?:(?:[^h]|h(?!alb))*halb){2}(?:[^h]|h(?!alb)|halb(?:(?:[^h]|h(?!alb))*halb){2})*$)/

ステップ 3:並べ替え/逆順にしてみる...

(注:私は非常に眠いので、テストしていません。必要に応じて数時間で修正します...)

編集:
わかりました、修正しました。したがって、機能しますが、文字列はまだ後方にあります。配列内のすべての文字列を逆にし、次に配列を逆にする必要があります。それでも、それは機能します。繰り返しになりますが、パフォーマンスに問題がある場合は、可能であれば所有量指定子を試してみてください。

于 2013-03-31T00:41:29.853 に答える
0
'(?:(?:.+?)blah(?:.+?)blah(?:.+?)(blah))'

これは機能するはずですが、非常に長いテキストに対して正規表現が最適なソリューションであるかどうかはわかりません

最初のキャプチャを回避するために編集されています...ただし、OPが正規表現の仕組みを理解していないことは明らかです

于 2013-03-31T00:28:24.157 に答える