可以看到哪个正则表达式匹配?
Posted
技术标签:
【中文标题】可以看到哪个正则表达式匹配?【英文标题】: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
【参考方案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
开头。
【讨论】:
动态组和交替组很漂亮 ++以上是关于可以看到哪个正则表达式匹配?的主要内容,如果未能解决你的问题,请参考以下文章