Regex.Matches返回空结果

本文关键字:结果 返回 Matches Regex | 更新日期: 2023-09-27 18:23:53

我想从论坛页面中过滤一些论坛条目内容。论坛条目位于两个blockquote元素之间(如Regex中所示)。我想用Regex过滤掉内容。这是我正在使用的代码:

string pattern = @"(<blockquote class='"postcontent restore '">)(.*?)(</blockquote>)";
Regex test = new Regex(pattern,  RegexOptions.IgnorePatternWhitespace);
MatchCollection m = test.Matches(downloadString);
var arr = m
  .Cast<Match>()
  .Select(n => n.Value)
  .ToArray();
foreach (string match in arr)
    {
         Console.WriteLine(match);
    }
Console.ReadLine();

我有这个例子:

<blockquote class="postcontent restore ">
  <br>
    Some Stuff
  <br>
    Some Stuff #2
  <br>
</blockquote>

我遇到的问题是返回的数组为空。你知道可能出了什么问题吗?我想这是因为空白,但我不知道如何"忽略"它们。

Regex.Matches返回空结果

。匹配除换行符以外的任何字符。

您可以使用它来包括换行符:

(<blockquote class='"postcontent restore '">)('n*.*)(<'/blockquote>)

你的模式也没有使用双qoute和前斜杠的转义,所以这里是:

编辑:对不起。@存在,所以最终版本应该是:)第2版:经过完整测试的源代码。检查IsMatch或空引用是您的责任

string pattern = @"(<blockquote class='""postcontent restore '"">)+(('n*)(.*))+(</blockquote>)";
Regex test = new Regex(pattern);
MatchCollection matches = test.Matches(downloadString);
StringBuilder xmlContentBUilder = new StringBuilder();
foreach (Capture capture in matches[0].Groups[2].Captures)
{
    xmlContentBUilder.Append(capture);
}
Console.WriteLine(xmlContentBUilder);