求正则表达式,括号成对匹配问题

seahi 2021-04-01 12:01:12
比如:
字符串是:ISNULL(FCommitAmount,0)>=SUM(ISNULL(FAmount,0))+FTaxAmount
我要匹配出:SUM(ISNULL(FAmount,0))
字符串是:ISNULL(FCommitAmount,0)>=SUM(FAmount)+FTaxAmount
我要匹配出:SUM(FAmount)
请问这个要怎么实现?
我使用Regex reg = new Regex(@"sum\(.+?\)", RegexOptions.IgnoreCase);//正则表达式
只能正确匹配第二种情况。
...全文
244 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
seahi 2021-04-01
  • 打赏
  • 举报
回复
好的,多谢,我先试试,这个还得慢慢看。
兔子-顾问 2021-04-01
  • 打赏
  • 举报
回复
正则解释: SUM\(((?<c>\()|(?<-c>\))|[^()])+\)(?(c)(?!)) 1.SUM\( 匹配文本SUM( 2.((?<c>\()|(?<-c>\))|[^()])+ 匹配三种范围 ( 、)、或是括号之外的任意字符,数量1个以上,并且(计入分组c,)将最近一次压栈的分组c移除。 3.\) 匹配末尾) 4.(?(c)(?!)) 根据结果,仍然有未闭合的(,则表示c分组捕获成功,执行(?!)表达式,将整个表达式判定为未匹配,反之通过。 就是通过平衡分组保证()的成对出现,然后就是括号,非括号的组合,就是sum()中间的部分。 不知道你明白了没,不明白就多看几次,不继续解释了 ^_^
sivccoo 2023-05-04
  • 举报
回复
@兔子-顾问 太厉害了 五体投地
兔子-顾问 2021-04-01
  • 打赏
  • 举报
回复
string pattern = @"SUM\(((?<c>\()|(?<-c>\))|[^()])+\)(?(c)(?!))";
string src = @"ISNULL(FCommitAmount,0)>=SUM(ISNULL(FAmount,0))+FTaxAmount
                ISNULL(FCommitAmount,0)>=SUM(FAmount)+FTaxAmount";
MatchCollection mc = Regex.Matches(src, pattern);
foreach (Match m in mc)
{
    MessageBox.Show(m.Value);
}
seahi 2021-04-01
  • 打赏
  • 举报
回复
非常好用,感谢感谢。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧