の代わりに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" は問題を引き起こします。