2011-02-03 21 views
3

「{m}」と「{m、n}」の違いは何ですか? http://docs.python.org/library/re.htmlで '{m、n}?'と表示されますmからnまでの範囲の数値と一致しますが、貪欲な検索ではありません。したがって、貪欲な検索ではない場合は、それはmまで一致するだけではなく、何ですか?python正規表現

+0

私はPython風の正規表現についてはわかりませんが、ほとんどの正規表現のフレーバー(およびそのプログラミング言語の大部分)は機能的に同じ構造をいくつか持っています。これは1つではありませんが、見つけたら驚かないでください。 –

+0

@chris:疑問があるときは、オンラインツールを使って正規表現システムをいくつかの言語から簡単に比較することができます。PHPとjavascriptはhttp://regex.larsolavtorvik.com/を、pythonにはhttp://ksamuel.pythonanywhere.comがあります。ここで簡単に新しい構造ではないことがわかります。 –

答えて

14

{m,n}?は、好ましくはただmの繰り返しと一致しますが、それは長い試合のために必要かどうn繰り返しまで、必要に応じてそれが拡大していきます。

^x{2}y$^x{2,4}?y$を比較します。後者は一致するのに対し、

前者はxxxyに失敗します。

x{m}を::x正確m回一致要約する

x{m,n}xn回にマッチするようにしてください、それが失敗する全体的な一致が発生した場合、必要に応じてバック与えるが、試合少なくともm倍(貪欲な量指定子)。

x{m,n}?xm回にマッチするようにしてください、それが失敗し、全体的な一致が発生した場合、最もn回(怠惰な量指定子)で、必要に応じて拡張するが、試合。

+0

良い答え、ありがとう – Doboy

+0

ええ - それをマークしてください! – Marco

+2

@マルコ:いいえ、15分以内に解答としてマークしてはいけません。常に1時間ほど待ってください。 (私の意見では、これはむしろはっきりしない説明です。) –

1

これは、2つの一致するグループを使用して例を参照するのが最も簡単だ:すなわち

>>> re.match(r'(x{1,3}?)(.*)', 'xxxxx').groups() 
('x', 'xxxx') 
>>> re.match(r'(x{1,3})(.*)', 'xxxxx').groups() 
('xxx', 'xx') 

、{N、M}と{N、M}?どちらもまったく同じものに一致することができます。それが変化するのは、一致させる方法が複数ある場合にグループ分けが行われるところです。