Regex偶尔也不会为相同的数据工作

时间:2013-10-29 06:37:20

标签: c# regex

我有以下正则表达式:

<div[^>]*>(?<Value>[^<]*(?:(?!</div)<[^<]*)*)[</div>]*

这个正则表达式几乎在所有时间都能完美地用于同一组数据,但有时它不会。

我有以下代码:

matchValue = oMatch.Groups["Value"].Value.ToLower();
if ((Regex.Match(matchValue, @"(effective\s*date)").Value).Equals("effective date", StringComparison.OrdinalIgnoreCase) == true || (Regex.Match(matchValue, @"(eff\s*date)").Value).Equals("eff date", StringComparison.OrdinalIgnoreCase) == true)
{
    headings = matchValue;
    headingsData = oMatch.NextMatch().Value;
}

我也使用Multiline作为RegexOptions。

我使用上面的代码与线程概念

现在我几乎每次都在“标题”和“headingsData”中得到正确的值,但有时我在标题中得到正确的值,但“headingsData”的值会发生变化。

有人能告诉我这种情况的原因吗?

1 个答案:

答案 0 :(得分:1)

使用Html Agility Pack

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");

// All divs that does not contain other divs
string xpath = "//div[not(.//div)]";

bool previousWasHeading = false;
foreach(HtmlNode div in doc.DocumentElement.SelectNodes(xpath))
{
    if (previousWasHeading)
    {
        // Previous <div> was the heading, this one is the heading data.
        headingsData = div.Text;
        previousWasHeading = false;
        break; // Stop after first heading/headingData
    }
    else if (div.InnerText.Contains("effective date") || div.InnerText.Contains("eff date"))
    {
        // This this <div> is the heading.
        heading = div.Text;
        previousWasHeading = true;
    }
}