确定哪些组在正则表达式中匹配

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:33:16

在我的程序中,我有一个regex模式,如下所示:

pattern = "([''w ]+)(''d{4})''s*(?:720|480|1080)[pP]|([''w ]+)(''d{4})|([''w ]+)";
Match match = Regex.Match(filename, pattern);

pattern包含 3 个不同的or条件,每个条件分别包含 2、2 和 1 个匹配组。

有没有办法确定哪个条件匹配,从而确定要检索哪个组?

谢谢你的帮助。

确定哪些组在正则表达式中匹配

组对象具有与此方案相关的 Success 属性:

下面是一些演示的代码:

using System;
using System.Text.RegularExpressions;
public class Program
{
    public static void Main()
    {
        var re = new Regex("((?<a>a)|(?<b>b))");
        var ma = re.Match("a");
        Console.WriteLine("a in a: " + ma.Groups["a"].Success);
        Console.WriteLine("b in a: " + ma.Groups["b"].Success);
        ma = re.Match("b");
        Console.WriteLine("a in b: " + ma.Groups["a"].Success);
        Console.WriteLine("b in b: " + ma.Groups["b"].Success);
    }
}

这将输出:

a in a: True
b in a: False
a in b: False
b in b: True

.NET 小提琴

如果您真的不在乎输入在 3 种格式中采用哪种格式,请像这样重写您的正则表达式以组合所有 3 个分支:

"([''w ]+)(?:(''d{4})(?:''s*(?:720|480|1080)[pP])?)?"

并且可以从捕获组 1 和 2 中检索数据。

由于量词的默认贪婪属性,试验顺序得以保留。