Python 正则表达式通过忽略其他方括号来查找两个开括号和闭括号之间的文本

Python 正则表达式通过忽略其他方括号来查找两个开括号和闭括号之间的文本,python,regex,perl,Python,Regex,Perl,我希望有一个正则表达式只捕获第一个while循环的整个主体(以及其他while和if语句)。我尝试:\while\s*(.+)\s*{(.+?)}\但是while的结束括号被排除。只考虑它遇到的第一个}。你也可以试试这个: method void run() { var char key; var boolean exit; let exit = key; while (exit) { // waits

我希望有一个正则表达式只捕获第一个while循环的整个主体(以及其他while和if语句)。我尝试:\while\s*(.+)\s*{(.+?)}\但是while的结束括号被排除。只考虑它遇到的第一个}。

你也可以试试这个:

method void run() {
        var char key;
        var boolean exit;

        let exit = key;

        while (exit) {
            // waits for a key to be pressed.
            while (key) {
                let key = key;
                do moveSquare();
            }

            if (key) {
                let exit = exit;
            }
            if (key) {
                do square.decSize();
            }


            // waits for the key to be released.
            while (key) {
                let key = key;
                do moveSquare();
            }
        }

        return;
 }

你可以试试看,正则表达式不能处理嵌套的递归结构。对于这些,你需要更强大的东西

在这些简单的“我只想提取一个子字符串”的情况下,我经常很幸运地使用它的
extract_括起来的
函数

对于需要一个实际的递归解析器的更大的情况,我就是为了这个目的而构建的


这两种语言都可以。

你不能为任何一种语言使用合适的解析器吗?我正试图为jack编写一个解析器。我试图提取while循环的内容。我可以在单个while循环中使用正则表达式,但是对于嵌套while循环,我的正则表达式不起作用。编写解析器是一个令人烦恼的难题。我不认为你会用正则表达式解决这个问题。重复?那么你把缩进语法化了?不确定这是聪明还是愚蠢。错。可以使用递归正则表达式来解析包含嵌套偏执词的小字符串。
/^(\s*)while.*{[^]*\1}/igm