の代わりにpython が一致する"(.*)"場合、そのような python 正規表現を作成するにはどうすればよいですか?"a (b) c (d) e""b""b) c (d"
"[^)]"の代わりに使用できることはわかっています"."が、正規表現を少しきれいに保つ、より一般的なソリューションを探しています。Pythonに「ねえ、これをできるだけ早く合わせてください」と伝える方法はありますか?
の代わりにpython が一致する"(.*)"場合、そのような python 正規表現を作成するにはどうすればよいですか?"a (b) c (d) e""b""b) c (d"
"[^)]"の代わりに使用できることはわかっています"."が、正規表現を少しきれいに保つ、より一般的なソリューションを探しています。Pythonに「ねえ、これをできるだけ早く合わせてください」と伝える方法はありますか?
>>> 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>ます。
うまくいきません\\(.*?\\)か?それが貪欲でない構文です。
貪欲でない一致を使用することは良い出発点ですが、の使用を再考することをお勧めします.*-これはどうですか?
groups = re.search(r"\([^)]*\)", x)
「(b)」に合わせますか?ジトラックスとパオロが提案したようにしてください。「b」に合わせますか?行う
>>> x = "a (b) c (d) e"
>>> re.search(r"\((.*?)\)", x).group(1)
'b'
他の人が使用して言ったように?* 量指定子の修飾子を使用すると、当面の問題は解決しますが、注意してください。正規表現が機能しなくなる領域に迷い込み始めており、代わりにパーサーが必要です。たとえば、文字列 "(foo (bar)) baz" は問題を引き起こします。