正则表达式Python,匹配A和B之间的任何内容,除非C

正则表达式Python,匹配A和B之间的任何内容,除非C,python,regex,Python,Regex,关于正则表达式的问题。我想匹配以下模式: A()()()(B) MATCH A()()(B) MATCH A()(B) MATCH A(B) MATCH 此外,如果括号中除了短语(否)之外还有任何内容,则该内容也应匹配: A(abc)(B) MATCH A()(def)(B) MATCH A()()(ghij)(B) MATCH A(klmn)(opq)()(B)

关于正则表达式的问题。我想匹配以下模式:

A()()()(B)         MATCH
A()()(B)           MATCH
A()(B)             MATCH
A(B)               MATCH
此外,如果括号中除了短语(否)之外还有任何内容,则该内容也应匹配:

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
我有以下资料:

A\(.*\)*(?<!\(NO\))\(B\)
A\(.*)*(?
请帮助!

您可以:

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

如果括号中有括号怎么办?括号可以嵌套吗?如果一组括号中除了
NO
之外还有其他东西怎么办?括号内的括号可以,只要括号外没有东西。((fdsffds)dfdsfs)可以。((NO)如果在嵌套的括号中,例如(dsasad(NO))就可以了但是有(NO(dsadwsa))是不好的,你需要一个完全基于1个正则表达式的解决方案吗?如果你不需要递归,你可以只使用
re
regex:。不需要。你有什么想法吗?啊,我想我有个主意,但是没有……类似于删除所有
\([^()]*)\)
模式并检查
否的内容和递归级别…如果需要在正则表达式中支持递归,则需要PyPi正则表达式模块。我不知道如何检查
(否)
是否嵌套。如果我也想让它允许嵌套的括号呢?我如何确保最后一个括号中的是a(B)?@ben检查我的编辑。
(B)
的匹配标记在末尾添加。。同样关于嵌套的
()
,是否可以嵌套
()
s?啊,太棒了!不可以这样嵌套((否))但不是(()否)。@ben这是我能得到的最接近的
^A(\(((?!NO\)[^)]*(\([^)]*)*)*(B\)$
。正则表达式正在破坏嵌套。检查