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

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);//正则表达式
只能正确匹配第二种情况。
...全文
146 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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()中间的部分。 不知道你明白了没,不明白就多看几次,不继续解释了 ^_^
  • 打赏
  • 举报
回复
兔子-顾问 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
非常好用,感谢感谢。
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2021-04-01 12:01
社区公告

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