在我的程序中,我有一个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个匹配组。
有没有办法可以确定哪个条件匹配,从而确定要检索哪个组?
感谢您的帮助。
答案 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
答案 1 :(得分:0)
如果你真的不关心3种格式中输入的格式,请像这样重写你的正则表达式来组合所有3个分支:
"([\\w ]+)(?:(\\d{4})(?:\\s*(?:720|480|1080)[pP])?)?"
您可以从捕获组1和2中检索数据。
由于量词的默认贪婪属性,保留了审判的顺序。