以不同的方式处理正则表达式匹配和不匹配
本文关键字:不匹配 正则表达式 处理 方式 | 更新日期: 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
属性来确定每个匹配中是否存在捕获组。