Skip to main content
 首页 » 编程设计

c#之使用带有 'or' 运算符的正则表达式并获得匹配的组

2024年02月25日30kuangbin

文件中有一些字符串,格式如下

rid="deqn1-2"   
rid="deqn3"   
rid="deqn4-5a"   
rid="deqn5b-7"   
rid="deqn7-8"   
rid="deqn9a-10v"   
rid="deqn11a-12c" 

我想要一个正则表达式来匹配每个 deqnX-Y,其中 X 和 Y 都是整数 或 整数和字母的组合 并且如果有匹配存储 X 和 Y> 在一些变量中。 我尝试使用正则表达式 (^(\d+)-(\d+)$|^(\d+[a-z])-(\d+[a-z]))$ ,但如何获取变量中匹配组的值? 对于两个整数之间的匹配,组将是(我认为)

Groups[2].Value  
Groups[3].Value 

对于两个整数和字母组合之间的匹配将是

Groups[4].Value 
Groups[5].Value 

如何确定实际发生了哪些匹配,然后相应地捕获匹配组?

请您参考如下方法:

由于 C# 不支持分支重置(?|),我们可以使用同名的命名捕获组,例如

deqn(?:(?<match1>\d+)-(?<match2>\d+)|(?<match1>\d+\w+)-(?<match2>\d+\w+))\b 

regextester demo

C#代码

String sample = "deqn1-2"; 
Regex regex = new Regex("deqn(?:(?<match1>\\d+)-(?<match2>\\d+)|(?<match1>\\d+\\w+)-(?<match2>\\d+\\w+))\\b"); 
 
Match match = regex.Match(sample); 
 
if (match.Success) { 
    Console.WriteLine(match.Groups["match1"].Value); 
    Console.WriteLine(match.Groups["match2"].Value); 
} 

dotnetfiddle demo