运行以下代码时:
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
元素时输出一个新行。我怎么能做到这一点?
答案 0 :(得分:1)
你可以这样做:
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
属性来确定每个匹配项中是否存在捕获组。