私はいつも正規表現がこのように働いていると仮定しましたが、私はこれまでのようなケースを打つことはなかったと思います。正規表現を非貪欲な方法で後方に返す方法
検討する文字列:。?私は本当に最後のリンゴと猫をしたいとき
apple
apple
apple
cat
私はリンゴのようなものを使用したい*猫は、しかし、これは猫への最初のリンゴと一致します。
私はいつも正規表現がこのように働いていると仮定しましたが、私はこれまでのようなケースを打つことはなかったと思います。正規表現を非貪欲な方法で後方に返す方法
検討する文字列:。?私は本当に最後のリンゴと猫をしたいとき
apple
apple
apple
cat
私はリンゴのようなものを使用したい*猫は、しかし、これは猫への最初のリンゴと一致します。
:
reg = re.compile(r'apple(?:(?!apple).)*cat', re.DOTALL)
(?:(?!apple).)*
は次のposのapple
を持っていない0以上の任意の文字にマッチします私たちの試合にはapple
がないことを確認しています。ネガティブなルックアヘッドはマッチの各キャラクターにアサートされることに注意してください。
私はpythonのドキュメントで 'tempered greedy token'を見つけることができません。そのフレーズはちょうど作られていますか?そのWebサイトは、多くの些細な迷惑であり、正規表現の深い理解を深めることは何もしません。彼のページの1つがhttp://www.rexegg.com/regex-consultant.htmlを要請しています。 – sln
私はPythonの正規表現ドキュメントには何の参照もないと思います。フレーズの「貪欲なトークン」はあまりよく説明されていませんが、このパターンの(?:(?! apple))* 'はかなり一般的でよく知られています。 – anubhava
もちろん。私はそれを聞いたことがないので、私は見なければならなかった。私が言ったように、作られた些細なジャンクの束。 – sln
実際の質問のように編集する必要があります。 –
これは貪欲とは関係ありません。正規表現エンジンは文字列を左から右に検索し、最初の結果を一番左の位置に返します。 –
この質問を見る:http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word –