我有这个字符串:
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)*PARAM2/100*(TABLE12(INITIALPARAM3)*PARAM3-(TABLE12(INITIALPARAM4)*PARAM4))"
我需要能够在括号中获取带有值的TABLEXY1。 其中的posibble值有:
(数)
(表达式)
(数,数字)
(数,表达)
(表达式,表达式)
(表达式,数)
我不知道会有多少括号。
我试过了
TABLEXY1\(((?<=\()(.*?)(?=\)))\)
但它给了我
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)
而不是我需要的东西
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)
答案 0 :(得分:1)
如果支持递归,则可以使用:
TABLEXY1(\(([^()]|(?1))*\))
据我所知,C#的正则表达式不支持递归。所以你可以一起跳过正则表达式。
var str = "TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)*PARAM2/100*(TABLE12(INITIALPARAM3)*PARAM3-(TABLE12(INITIALPARAM4)*PARAM4))";
int match = str.IndexOf("TABLEXY1");
if (match != -1)
{
int begin = str.IndexOf("(", match) + 1;
int end = 0;
int parenthesisCount = 1;
for (int i = begin; i < str.Length; ++i)
{
char c = str[i];
if (c == '(')
++parenthesisCount;
else if (c == ')')
--parenthesisCount;
if (parenthesisCount == 0)
{
end = i;
break;
}
}
Console.WriteLine(str.Substring(match, end - match + 1));
}
哪个输出:
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)
答案 1 :(得分:0)
你有意这样吗?
&#34;??(= TABLEXY1 +()\ S +(= * PARAM2 *)&#34;
我得到的答案是:TABLEXY1((INITIALPARAM2 * 117.3 / MADAD(2)),INITIALPARAM1 + 1)