确定哪些组在正则表达式中匹配
本文关键字:正则表达式 | 更新日期: 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 中检索数据。
由于量词的默认贪婪属性,试验顺序得以保留。