我有以下正则表达式:
<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”的值会发生变化。
有人能告诉我这种情况的原因吗?
答案 0 :(得分:1)
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;
}
}