4

あいまいなタイトルで申し訳ありませんが、私の問題を 1 文で説明する方法がわかりません。

そのため、ブラケット間のコードを抽出するための単純な正規表現コードがいくつかあります。

^.*\((.*)\).*

これは、次のコードを使用して Python で正常に機能します。

m = re.search( "^.*\((.*)\).*" ,input)
if m:
    print(m.groups()[0])

私の問題は、閉じ括弧)が最も外側の括弧の内側にある可能性がある場合に発生します。たとえば、与えられたときの私の現在のコード

nsfnje (19(33)22) sfssf

入力が返されるように

19(33

でも返してほしい。

19(33)22

これを修正する方法がわからないので、助けていただければ幸いです。

4

2 に答える 2

8
>>> input = "nsfnje (19(33)22) sfssf"
>>> re.search( "\((.*)\)" ,input).group(1)
'19(33)22'

これは、バランスが取れていなくても、最も外側の括弧を検索することに注意してください (例: "(1(2)))))")。単一の標準正規表現を使用して、バランスの取れた括弧を検索することはできません。詳細については、この回答を参照してください。

于 2013-04-07T16:36:10.527 に答える
0

あなたのコードは与える19(33のではなく、与えるの33)22です。

問題は^.*、正規表現の先頭にある が文字列の最後 まで一致するのに対し、実際には文字列の最初から(一致させたいことです。 (

最も外側の括弧内にあるものだけが必要な場合は、正規表現の先頭にある を削除します。同様に目的を果たさないため.*、末尾も削除することができます。.*

"\((.*)\)"

行/文字列全体と括弧内の一致が必要な場合は、次*を追加して遅延して最初の一致を作成します?

"^.*?\((.*)\).*"

またはより良い、使用

"^[^(]*\((.*)\).*"
于 2013-04-07T16:57:50.017 に答える