Python 查找正则表达式模式以匹配较大模式中最内层(第一个)的模式

Python 查找正则表达式模式以匹配较大模式中最内层(第一个)的模式,python,regex,Python,Regex,我的测试字符串是这样的 sdfsdfs sdfsd To(SObj,sfddslfks To(SObj, abc ), abc(_) ) )) ), To(SObj, Or( And( Or( And( abc Or( DCh=t'3', abc ab3 ) )

我的测试字符串是这样的

    sdfsdfs sdfsd
    To(SObj,sfddslfks
    To(SObj,
      abc
    ), 
    abc(_)
    )
    ))
    ), 
    To(SObj,
    Or(
    And(
    Or(
      And(
        abc
        Or(
        DCh=t'3', 
         abc
         ab3
        )
      ), 
    To(SObj,  sfdsd
    sdfdsf
    )
    )
注意:在实字符串中,所有括号都是平衡的

我想写一个正则表达式模式,只将
删除(或匹配)到(SObj
,其中包含
DCh

i、 e.从上述示例中,仅需删除或匹配以下内容

To(SObj,
Or(
And(
Or(
  And(
    abc
    Or(
    DCh=t'3', 
     abc
     ab3
    )
  ), 

但是,我的模式
(到\(SObj[\s\s]+DCh[\s\s]+)到\(SObj
匹配整个测试字符串,而不平衡括号:

resultstring = re.sub(r'To\(SObj,[^)]*?DCh=[^(]*\),','', inputstring, flags=re.DOTALL)

可以测试正则表达式

((sdfsdfssdfsddto(SObj,sfddslfksTo(SObj,abc),abc(()))),To(SObj,Or(And(And(abcOr(DCh=t'3',abcab3)),To(SObj,sfdsdfdsf()))
是平衡的。但是,python'r
re
不能匹配平衡项。这可能在他们新的
regex
模块中,如果它有一些Perl构造,我可以给你一个regex。注意,如果使用python的
regex
模块,它应该支持递归和所有格量词。在这种情况下,将
匹配到(?)=\(SObj)(\((((?:[^()]+++)(?1))*)\)
然后在替换回调中检查$1=>将$1复制到一个新字符串,在其上运行这个正则表达式
DCh
,或者只使用一个字符串函数。如果它存在,则替换为nothing,如果不存在,则返回未更改的$1。下面是一个示例感谢@sln,让我尝试一下。抱歉,它不能与python模块一起工作。但是@LukStorms answer workedThanks,它可以工作s、 你介意在你的模式上写一个小的解释来帮助像我这样的noobs吗?基本上,如果你能解释这里发生了什么
[^]*?DCh=[^(]
你可以看看测试的解释计划。但是字符类开头的^表示它的否定。然后它会查找不在其中的任何字符。所以[^(]*匹配0个或多个不匹配的字符(因为它是[^(]*?它正在进行延迟搜索。尝试尽可能少地查找。我发现在DCh之前没有),在它之后没有(