可以看到匹配哪个正则表达式吗?

时间:2020-06-26 08:56:12

标签: c# regex regex-group

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

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

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

我们发现bbb10.zip与正则表达式。

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

1 个答案:

答案 0 :(得分: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),在那里您可以清楚地看到两个捕获组。

请注意,由于match.Groups[0].Value等于match.Value(即整个匹配项),因此捕获组ID以1开头,这就是for循环以n=1开头的原因。