2016-08-24 13 views
2

私はいつも正規表現がこのように働いていると仮定しましたが、私はこれまでのようなケースを打つことはなかったと思います。正規表現を非貪欲な方法で後方に返す方法

検討する文字列:。?私は本当に最後のリンゴと猫をしたいとき

apple 
apple 
apple 
cat 

私はリンゴのようなものを使用したい*猫は、しかし、これは猫への最初のリンゴと一致します。

+2

実際の質問のように編集する必要があります。 –

+0

これは貪欲とは関係ありません。正規表現エンジンは文字列を左から右に検索し、最初の結果を一番左の位置に返します。 –

+0

この質問を見る:http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word –

答えて

4
(すなわちちょうどリンゴと猫の間に1つの改行に一致するように私に告げることは、私の実際のケースでは動作しません)私はこれを行うための一般的な方法を探しています、これは単なる一例ですのでご注意下さいあなたはPythonで tempered greedy token正規表現に基づいて、この負の先読みを使用することができます

reg = re.compile(r'apple(?:(?!apple).)*cat', re.DOTALL) 

RegEx Demo

(?:(?!apple).)*は次のposのappleを持っていない0以上の任意の文字にマッチします私たちの試合にはappleがないことを確認しています。ネガティブなルックアヘッドはマッチの各キャラクターにアサートされることに注意してください。

+0

私はpythonのドキュメントで 'tempered greedy token'を見つけることができません。そのフレーズはちょうど作られていますか?そのWebサイトは、多くの些細な迷惑であり、正規表現の深い理解を深めることは何もしません。彼のページの1つがhttp://www.rexegg.com/regex-consultant.htmlを要請しています。 – sln

+0

私はPythonの正規表現ドキュメントには何の参照もないと思います。フレーズの「貪欲なトークン」はあまりよく説明されていませんが、このパターンの(?:(?! apple))* 'はかなり一般的でよく知られています。 – anubhava

+0

もちろん。私はそれを聞いたことがないので、私は見なければならなかった。私が言ったように、作られた些細なジャンクの束。 – sln

関連する問題