Python 如何得到一个字符串的整个括号,其中可能包含无限级的括号

Python 如何得到一个字符串的整个括号,其中可能包含无限级的括号,python,regex,python-3.x,Python,Regex,Python 3.x,我已经看到了这个答案:但如果我不知道这些括号的层数,它就不会真正起作用 实际上,我正试图用python对js文件进行除臭,我有一个字符串,我想“刮”一下: 当我运行:re.findall(r“String.fromCharCode\(.+?)\),content)时,它首先返回我String.fromCharCode((03*(07*4+3))。 因此,我的代码行似乎只是在搜索第一次出现的闭括号。我没有尝试上面链接的答案,但它似乎不是“无限”,我们应该事先知道级别的数量 我想得到的是整个括号:(

我已经看到了这个答案:但如果我不知道这些括号的层数,它就不会真正起作用

实际上,我正试图用python对js文件进行除臭,我有一个字符串,我想“刮”一下:

当我运行:
re.findall(r“String.fromCharCode\(.+?)\),content)
时,它首先返回我
String.fromCharCode((03*(07*4+3)
)。 因此,我的代码行似乎只是在搜索第一次出现的闭括号。我没有尝试上面链接的答案,但它似乎不是“无限”,我们应该事先知道级别的数量

我想得到的是整个括号:
((010*12+6),(06*(0x1*(1*0xa+6)+1)+12),(4*27+3),(01*0x3b+50),(1*0x34+15),(1*(1*(3*(0x1*8+7)*1+0)+8)+24)+27),(0x1*(2*0x25+7)+16),(1*0112+40),(1*0x2c 23),(0x3*042+9),(1*(05*4+1)*03+37),(0x2*(1*0x1f+4)+31))

编辑:

为了澄清这一点,代码中还出现了许多上面的“
字符串.fromCharCode
”。如果我要删除正则表达式代码中的
,它将检索整个代码

EDIT2:

我做了一件事:
这似乎是可行的。

python中的
+
限定符在默认情况下是贪婪的,因此它将尽可能多地匹配。您在它之后添加了一个
,这使得它不贪婪。将
取出,它应该一直匹配到下一个右括号,但如果它能找到其他右括号,它也会匹配得更远即使这超出了
fromCharCode
的右括号,也会进一步深入您的输入。

我想知道这是否是解决问题的正确方法,但您可能会使用递归方法和更新的
regex
模块:

String\.fromCharCode[^()]*
(
    \(
        (?:[^()]|(?1))*
    \)
)


Python
中可以是:

import regex as re

rx = re.compile(r'''
    String\.fromCharCode[^()]*
    (
        \(
            (?:[^()]|(?1))*
        \)
    )
''', re.VERBOSE)

for snippet in rx.finditer(your_string_here):
    print(snippet.group(0))

问题是我展示的代码在我想去泡沫的代码中是重复出现的,如果我删除
,它将把其他括号带到最后。
import regex as re

rx = re.compile(r'''
    String\.fromCharCode[^()]*
    (
        \(
            (?:[^()]|(?1))*
        \)
    )
''', re.VERBOSE)

for snippet in rx.finditer(your_string_here):
    print(snippet.group(0))