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