确定正则表达式中匹配的组

时间:2014-12-05 07:30:06

标签: c# regex

在我的程序中,我有一个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个匹配组。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分: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 Fiddle

答案 1 :(得分:0)

如果你真的不关心3种格式中输入的格式,请像这样重写你的正则表达式来组合所有3个分支:

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

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

由于量词的默认贪婪属性,保留了审判的顺序。