Я хотел бы сопоставить параметры любой функции в виде строки с использованием регулярного выражения. В качестве примера предположим следующую строку:Regex Match равное количество двух символов
predicate(foo(x.bar, predicate(foo(...), bar)), bar)
это может быть частью более длинной последовательности
predicate(foo(x.bar, predicate(foo(...), bar)), bar)predicate(foo(x.bar, predicate(foo(...), bar)), bar)predicate(foo(x.bar, predicate(foo(...), bar)), bar)
Теперь я хочу, чтобы найти все подстроки, которые представляют собой функцию/предиката и его параметры (т.е. первый пример - целая строка, а также вложенный predicate(foo(...), bar)
). Проблема заключается в том, что я не могу просто соответствовать как этот
predicate\(.*, bar\)
, как я может тогда соответствовать более параметров предиката, если *
жаден, или меньше, если он ленив. Это потому, что такие предикаты() могут быть вложенными.
мне нужно регулярное выражение, которое находит строку predicate(...)
, где ...
соответствует любой строке, которая содержит равное количество (
х и )
-х (ленивых).
Если это имеет значение: я использую регулярное выражение с модулем re в python.
[этот ответ] (http://stackoverflow.com/a/24696831/2272638) может привести в правом направление?Недостаточно кофе, чтобы доказать/адаптироваться, иначе я бы опубликовал ответ :). – dwanderson
Модуль 're' Python не может обрабатывать рекурсию или балансировку, которые вам понадобятся здесь. Можете ли вы установить модуль '' regex' (PyPI)] (https://pypi.python.org/pypi/regex)? –
@dwanderson, который, к сожалению, не работает (или я не получаю id), поскольку он не пытается сопоставить равное количество скобок, он просто сопоставляет что-либо между a (и a) – weidler