回答:
>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'
'
*
'、 '+
'、および '?
'修飾子はすべて貪欲です。それらは可能な限り多くのテキストと一致します。この動作が望ましくない場合もあります。RE<.*>
が '<H1>title</H1>
' と一致する場合、'<H1>
' だけでなく、文字列全体と一致します。?
修飾子の後に「」を追加すると、貪欲でない、または最小限の方法で一致が実行されます。できるだけ少ない文字が一致します。.*?
前の式で使用すると、「<H1>
」のみが一致します。
他の人が使用しているように?*数量詞の修飾子は当面の問題を解決しますが、注意してください。正規表現が機能しなくなる領域に迷い始めており、代わりにパーサーが必要です。たとえば、文字列 "(foo(bar))baz"は問題を引き起こします。
まず、正規表現で「*」を使用することはお勧めしません。はい、わかっています。これは、最も使用されている複数文字の区切り文字ですが、それでも悪い考えです。これは、その文字の任意の繰り返しに一致しますが、 "any"には0が含まれるためです。これは通常、構文エラーをスローしたいもので、受け入れられません。代わりに、+
長さ> 1の繰り返しに一致する符号を使用することをお勧めします。さらに、私が見ることができることから、固定長の括弧で囲まれた式を扱っています。その結果、おそらく{x, y}
構文を使用して、必要な長さを具体的に指定できます。
ただし、本当に貪欲でない繰り返しが必要な場合は、全力のコンサルタントに相談することをお勧めし?
ます。これを正規表現の繰り返し指定子の最後に配置すると、正規表現のその部分でテキストをできるだけ少なく見つけることが強制されます。
そうは言っても、?
Dr。Whoのソニックドライバーのように、慎重に調整されていない場合は「わずかに」望ましくないことを行う傾向があるため、私はそれを慎重に検討します。たとえば、入力例を使用する場合((1)
、一致として識別されます(2番目のrparenがないことに注意してください)。