【问题标题】:Possible to see on which regex is matched?可以看到哪个正则表达式匹配?
【发布时间】:2020-10-16 20:29:25
【问题描述】:

是否可以在 C# 中查看匹配哪个正则表达式?

例如,如果我们有这个正则表达式:

aaa[0-9]{2}\.zip|bbb[0-9]{2}\.zip

我们用正则表达式找到bbb10.zip

是否可以看到匹配的模式(它是bbb[0-9]{2}.zip)?

【问题讨论】:

  • 谢谢!但是,我现在看到的问题并不完全清楚。是否也可以获取正则表达式本身,即bbb[0-9]{2}.zip

标签: c# regex regex-group


【解决方案1】:

您可以定义模式列表并使用包含在捕获组中的替代方案构建模式。然后,一旦找到匹配项,您就可以遍历组并找到匹配的组。

using System;
using System.Linq;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var p = new[] {
            @"aaa[0-9]{2}\.zip",
            @"bbb[0-9]{2}\.zip"
        };
        var pat = new Regex($"({string.Join(")|(", p)})");
        var match = pat.Match("We have bbb12.zip match");
        for (var n=1; n <= p.Count(); n++)
        {
            if (match.Groups[n].Success) 
            {
                Console.Write("{0} group matched, the pattern is {1}", n, p[n-1]);
                break;
            }
        }
    }
}

查看C# demo,输出 - 2 group matched, the pattern is bbb[0-9]{2}\.zip

正则表达式看起来像(aaa[0-9]{2}\.zip)|(bbb[0-9]{2}\.zip),您可以清楚地看到两个捕获组。

注意捕获组 ID 以 1 开头,因为 match.Groups[0].Value 等于 match.Value,整个匹配,这就是为什么 for 循环以 n=1 开头。

【讨论】:

  • 动态组和交替组很漂亮 ++
猜你喜欢
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多