2016-05-09 9 views
1

正規表現についての質問。私は私がマッチさせたい以下のパターンがあります。Regex Python、AとBの間の何かにマッチしない限りC

A()()()(B)   MATCH 
A()()(B)   MATCH 
A()(B)    MATCH 
A(B)    MATCH 

ALSO何かが離れても一致している必要があり句(NO)、その後の括弧内にある場合:私はしたくないしかし

A(abc)(B)   MATCH 
A()(def)(B)  MATCH 
A()()(ghij)(B)  MATCH 
A(klmn)(opq)()(B) MATCH 
A(NO)(B)   NO MATCH 
A()()(NO)(B)  NO MATCH 
A(abc)(NO)(B)  NO MATCH 

Aabc(B)   NO MATCH 
A()defg()(B)  NO MATCH 

私が持っている以下:

カッコ内にないものがある場合は、フレーズが一致します

お願いします!

あなたが行うことができます
+0

カッコ内のブラケットがあるかどうか?角かっこは入れ子にできますか? 1つの括弧内に「いいえ」以外のものがある場合はどうなりますか? –

+0

括弧内の括弧は、括弧の外側にあるものとまったく同じです。 ((fdsffds)dfdsfs)は問題ありません。 (NO)は(dsasad(NO))のようなネストされた括弧内にある場合は問題ありませんが、(NO(dsadwsa))を持つのは問題ありません – ben

+0

完全正規表現ベースのソリューションが1つ必要ですか?あなたが再帰を必要としないなら、あなたはre正規表現を使うことができます:['^ A(\((!!NO \))[^()] * \))+ $'](https:// regex101 .com/r/nS3hN4/1)。 –

答えて

1

^A(\((?!NO\))[^)]*\))*\(B\)$ 

Demo

+0

ネストされた大括弧を許可したい場合はどうすればいいですか? – ben

+0

また、最後の括弧内にあるものが(B)であることを確認するにはどうすればよいですか? – ben

+0

@benネストされた '()'の最後に '(B)'のマッチトークンが追加されました。 '()'は入れ子になっていますか? – heemayl

関連する問題