当前位置: 首页 > 知识库问答 >
问题:

匹配多个平衡组

杨轶
2023-03-14

我正在搜索一个正则表达式来匹配文本中的所有C#方法,每个找到的方法(引用为“内容”)的主体应该可以通过组访问。

如果文本中只存在一种方法,则上面的C#Regex只能给出所需的结果。

原文:

void method1(){

if(a){ exec2(); }   
else {  exec3(); }  

}

void method2(){

if(a){ exec4(); }   
else {  exec5(); }  

}

正则表达式:

string pattern = "(?:[^{}]|(?<Open>{)|(?<Content-Open>}))+(?(Open)(?!))";
MatchCollection methods  = Regex.Matches(source,pattern,RegexOptions.Multiline);
 foreach (Match c in methods)
 {
    string body = c.Groups["Content"].Value; // = if(a){ exec2(); }else {  exec3();}
    //Edit: get the method name
    Match mDef= Regex.Match(c.Value,"void ([\\w]+)");
    string name = mDef.Groups[1].Captures[0].Value;
 }

如果source中只包含method1,那么它可以完美地工作,但是使用其他method2时,只有一个匹配项,并且不能再提取单独的方法体对。

如何修改正则表达式以匹配多种方法?

共有1个答案

李捷
2023-03-14

假设您只想匹配问题中的基本代码,您可以使用

(?<method_name>\w+)\s*\((?s:.*?)\)\s*(?<method_body>\{(?>[^{}]+|\{(?<n>)|}(?<-n>))*(?(n)(?!))})

见演示

要访问所需的值,请使用。组[“方法名称”]。值。分组[“方法\正文”]。值

 类似资料:
  • 如何精确匹配img标记的多个实例?我读了一些关于preg_match的教程,但从未真正理解。 我以此为基础: 我做了一个小的像正则表达式: 在这之后,我就卡住了。我如何继续匹配所有直到两个字符串的末尾? 我在PHP网站上发现了数组部分: 使用我的代码,我如何获得图像URL和alt标签? 谢谢

  • 是否可以让Selenium匹配多个类名? 例如: 谢谢

  • 我们将AmazonWeb服务用于使用node的业务应用程序。js服务器和mongodb作为数据库。当前已删除该节点。js服务器正在EC2介质实例上运行。我们将mongodb数据库保存在一个单独的微实例中。现在我们希望在mongodb数据库中部署副本集,这样,如果mongodb被锁定或不可用,我们仍然可以运行数据库并从中获取数据。 因此,我们试图将副本集的每个成员保持在单独的实例中,这样即使主模块的

  • 我在一个项目中使用全文搜索。我想搜索多个单词,但我有一个问题。所以我的查询是; 这个查询是包括word1或word2或word3或word4的搜索,但我想搜索包括word1或word2或word3 word4的搜索 那么解决方案是什么呢?

  • 问题内容: 如何使用FLANN优化许多图片的SIFT功能匹配? 我有一个来自Python OpenCV文档的工作示例。但是,这是将一个图像与另一个图像进行比较,而且速度很慢。我需要它来搜索一系列图像(几千个)中匹配的特征,并且我需要它更快。 我目前的想法: 浏览所有图像并保存功能。怎么样? 将相机的图像与上述基础进行比较,然后找到正确的图像。怎么样? 给我结果,匹配图像或其他东西。 http://

  • 我的目标是得到两个匹配: 非常感谢你的帮助。