Разобрать формулу Excel =a(b,c,d) с помощью Regex в vb.net

Я пытаюсь проанализировать параметры формул Excel, таких как «= a (b)», «= a (b, c)», «= a (b, c, d)». Я хотел бы извлечь имя функции "a" и параметры "b", "c" и "d".

В SO есть множество примеров для анализа HTML и т. д., но ни одного специально для круглых скобок.

Пока у меня есть "=(.+)\(([^,)]*)(,[^,)]*)*\)", но когда я анализирую "=a(b,c,d)", он помещает "a" в match(1), "b" в match(2) и ",d" в match(3). Итак, «с» теряется, а запятая перед «д» — это боль.

Как я могу разобрать подобную строку с произвольным количеством параметров, в идеале опуская запятые?

Возможность разобрать "=a(b(c),d(e(f)))" была бы здорово...


Изменить: я знаю, что синтаксический анализатор является правильным решением, и я использовал отличный анализатор Gold от Девина Кука с великолепным результаты раньше.

Однако конкретный случай, с которым я сталкиваюсь, заключается в извлечении аргументов из известной формулы Excel. В частности, если формула содержит строку "=Travel()", я знаю, что у нее будет 4 аргумента, и если они не анализируются, это не проблема. Это просто "приятно иметь" функция, которая может время от времени давать сбой, но не является проблемой.

Может ли кто-нибудь помочь мне с регулярным выражением для "=a(b,c,d)", "=a(b,c,d,e)" и т.д., с ограничением, что будет no< /strong> вложенные скобки или запятые?

Спасибо!


person smirkingman    schedule 23.12.2010    source источник
comment
Если вам нужен парсер, напишите парсер. Невозможно сопоставить вложенные выражения с регулярным выражением.   -  person Carl Norum    schedule 24.12.2010
comment
@Carl: Это не совсем так; .NET предоставляет средства для сопоставления произвольно вложенных скобок с регулярными выражениями. Но тем не менее, я согласен, что вам больше по душе парсер для такой работы.   -  person Tim Pietzcker    schedule 24.12.2010
comment
@Tim Действительно, и идея изложена здесь weblogs.asp .net/whaggard/archive/2005/02/20/377025.aspx На что я надеялся, так это на фактическую реализацию   -  person smirkingman    schedule 24.12.2010


Ответы (1)


Это помогает? Регулярное выражение для анализа функций произвольной глубины

person SFun28    schedule 12.01.2011
comment
похоже у нас была такая же проблема! - person SFun28; 12.01.2011