以不同的方式处理正则表达式匹配和不匹配

本文关键字:不匹配 正则表达式 处理 方式 | 更新日期: 2023-09-27 18:14:58

运行以下代码时:

string input = "<td>abc</td><td></td><td>abc</td>)";
string pattern = "<td>(abc)?</td>";
foreach (Match match in Regex.Matches(input, pattern))
    Console.Write(match.Groups[1].Value);

If输出如下文本:

abcabc

这是有意义的,因为模式只匹配输入字符串中的第一个和最后一个td元素。但是,我想更改它,使其输出如下内容:

abc
abc

换句话说,我希望它在遇到一个空的td元素时输出一个新行。我怎么才能做到呢?

以不同的方式处理正则表达式匹配和不匹配

你可以这样做:

string input = "<td>abc</td><td></td><td>abc</td>)";
string pattern = "<td>(abc)?</td>";
foreach (Match match in Regex.Matches(input, pattern))
{
    if (match.Groups[1].Success)
        Console.Write(match.Groups[1].Value);
    else
        Console.WriteLine();
}

通过将模式从<td>(abc)</td>更改为<td>(abc)?</td>, abc成为可选的。换句话说,<td>abc</td><td></td>输入都将匹配。由于整个组是可选的,因此您可以使用Group.Success属性来确定每个匹配中是否存在捕获组。