在C#中是否可以查看匹配哪个正则表达式?
例如,如果我们有此正则表达式:
aaa[0-9]{2}\.zip|bbb[0-9]{2}\.zip
我们发现bbb10.zip
与正则表达式。
那么是否有可能看到匹配的模式(它是bbb[0-9]{2}.zip
)?
答案 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
开头的原因。