2016-05-09 3 views
1

Eine Frage zu Regex. Ich habe folgende Muster, die ich passen will:Regex Python, Match alles zwischen A und B, es sei denn C

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

auch, wenn etwas in den Klammern neben dem Ausdruck (NEIN) ist auch das sollte dann passen:

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 

aber ich will nicht der Begriff übereinstimmen, wenn es etwas ist, das nicht in den Klammern ist:

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

ich habe folgende:

A\(.*\)*(?<!\(NO\))\(B\) 

BITTE HILFE!

+0

Was passiert, wenn eine Klammer in den Klammern ist da? Können Klammern verschachtelt werden? Was ist, wenn neben "NO" noch andere Dinge in Klammern stehen? –

+0

Klammern in Klammern sind in Ordnung, solange nichts außerhalb der Klammern ist. ((fdsffds) dfdsfs) ist in Ordnung. Das (NO) ist in Ordnung, wenn es in einer geschachtelten Klammer wie (dsasad (NO)) ist, aber es ist nicht gut zu haben (NO (dsadwsa)) – ben

+0

Benötigen Sie eine vollständig 1 Regex-basierte Lösung? Wenn Sie keine Rekursion benötigen, können Sie eine einfache 're' Regex verwenden: ['^ A (\ ((?! NO \)) [^()] * \)) + $'] (https: // regex101 .com/r/nS3hN4/1). –

Antwort

1

können Sie tun:

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

Demo

+0

Was, wenn ich auch verschachtelte Klammern zulassen wollte? – ben

+0

Auch wie stelle ich sicher, was in der letzten Klammer ist a (B)? – ben

+0

@ben Überprüfen Sie meine edits..matching-Token für '(B)' am Ende hinzugefügt..auch über die verschachtelten '()', kann 'NO' auf verschachtelten'() 's sein? – heemayl

Verwandte Themen