使用正则表达式查找嵌套括号
Find nested parentheses with regex
我有这个字符串:
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)*PARAM2/100*(TABLE12(INITIALPARAM3)*PARAM3-(TABLE12(INITIALPARAM4)*PARAM4))"
我需要能够获取括号中包含其值的 TABLEXY1。
可能的值有:
(个数)
(表达式)
(数字,数字)
(数字,表达式)
(表达式,表达式)
(表达式,数字)
我不知道会有多少括号。
我试过了
TABLEXY1\(((?<=\()(.*?)(?=\)))\)
但它给了我
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)
不是我需要的
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)
你是故意的吗?
"(?=TABLEXY1.+()\S+(?=*PARAM2.*)"
我得到的答案是:TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+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)
我有这个字符串:
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)*PARAM2/100*(TABLE12(INITIALPARAM3)*PARAM3-(TABLE12(INITIALPARAM4)*PARAM4))"
我需要能够获取括号中包含其值的 TABLEXY1。 可能的值有:
(个数)
(表达式)
(数字,数字)
(数字,表达式)
(表达式,表达式)
(表达式,数字)
我不知道会有多少括号。
我试过了
TABLEXY1\(((?<=\()(.*?)(?=\)))\)
但它给了我
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)
不是我需要的
TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+1)
你是故意的吗?
"(?=TABLEXY1.+()\S+(?=*PARAM2.*)"
我得到的答案是:TABLEXY1((INITIALPARAM2*117.3/MADAD(2)),INITIALPARAM1+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)