我似乎记得DotNet中的正则表达式有一个特殊的机制,允许嵌套结构的正确匹配,如" ( (a ( ( c ) b ) ) ( d ) e )"中的分组.
什么是python相当于这个功能?这可以使用正则表达式实现一些解决方法吗?(虽然这似乎是当前正则表达式的实现不是为此而设计的那种问题)
当我有这样的字符串:
s1 = 'stuff(remove_me)'
Run Code Online (Sandbox Code Playgroud)
我可以轻松删除括号和使用中的文本
# returns 'stuff'
res1 = re.sub(r'\([^)]*\)', '', s1)
Run Code Online (Sandbox Code Playgroud)
为解释在这里.
但我有时遇到这样的嵌套表达式:
s2 = 'stuff(remove(me))'
Run Code Online (Sandbox Code Playgroud)
当我从上面运行命令时,我最终得到了
'stuff)'
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
re.sub('\(.*?\)', '', s2)
Run Code Online (Sandbox Code Playgroud)
这给了我相同的输出.
如何删除外括号内的所有内容 - 包括括号本身 - 以便我最终得到'stuff'(这应该适用于任意复杂的表达式)?
对于含糊不清的标题表示道歉,但我不知道如何用一句话来理解我的问题.
所以我有一些简单的正则表达式代码来提取括号之间的代码.
^.*\((.*)\).*
Run Code Online (Sandbox Code Playgroud)
这可以在Python中成功使用以下代码.
m = re.search( "^.*\((.*)\).*" ,input)
if m:
print(m.groups()[0])
Run Code Online (Sandbox Code Playgroud)
当一个右括号)可能在最外面的括号内时,我的问题出现了.例如,我给出的当前代码
nsfnje (19(33)22) sfssf
Run Code Online (Sandbox Code Playgroud)
作为输入将返回
19(33
Run Code Online (Sandbox Code Playgroud)
但我希望它能回来.
19(33)22
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,所以任何帮助都将不胜感激!