I am building an application where the user can specify an expression for some fields. The expression shall contain functions too. I need to evaluate these expressions and display final value in report.
I had an expression to extract function-name & it's paramters. Previously, the function parameters were decimal values. But now, the parameters can also be expression.
For ex,
Round( 1 * (1+ 1 /100) % (2 -1), 0)
Function-name : Round
Parameter1 : 1 * (1+ 1 /100) % (2 -1)
Parameter2 : 0
Previous Regex:
string pattern2 = @"([a-zA-Z]{1,})[[:blank:]]{0,}\(([^\(\)]{0,})\)";
This regex does not help me anymore to find expression-parameters.
Can someone help me with the right regex to extract function-name & parameters? I am implement all or most of the functions supported by Math class. The program is built in c#
Thanks in advance for the help.
"^\s*(\w+)\s*\((.*)\)"
group(1) is function name
split group(2) with ","
you get para list.
updated
since I don't have Windows system (.Net either), I test it with python. nested function is not a problem. if we add "^\s*" at the beginning of the expression:
import re
s="Round(floor(1300 + 0.234 - 1.765), 1)"
m=re.match("^\s*(\w+)\s*\((.*)\)",s)
m.group(1)
Output: 'Round'
m.group(2)
Output: 'floor(1300 + 0.234 - 1.765), 1'
you can split if you like:
m.group(2).split(',')[0]
Out: 'floor(1300 + 0.234 - 1.765)'
m.group(2).split(',')[1]
Out: ' 1'
well, if your function nesting is like f(a(b,c(x,y)),foo, m(j,k(n,o(i,u))) )
, my code won't work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With