繁体   English   中英

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

[英]Process regex matches and non-matches differently

运行以下代码时:

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);

如果输出以下文本:

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属性来确定每个匹配项中是否都存在捕获组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM