根据html自定义标签的名称匹配出所有标签的ID,并根据ID替换标签为数据(包括标签的定义)(空标签):
string rgHtml = @"<customname(.|\n)*?</customname>"; matchs = Regex.Matches(html, rgHtml, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); foreach (Match item in matchs) { string strItem = item.Value; string strID = Regex.Match(strItem, @"id=""(\w+)""").Groups[1].ToString(); if (data.GetType().GetProperties().ToList().Where(p => p.Name == strID).Count() > 0) html = html.Replace(strItem, data.GetType().GetProperty(strID).GetValue(data).ToString()); }
根据html自定义标签获取标签的内容(不包括标签的定义)
foreach (var itemP in model.GetType().GetProperties().ToList()) { if (itemP.Name != "LabelID" && itemP.Name != "Html") { string rgLabelAll = @"<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>[""']?)" + itemP.Name + @"(?(Quote)\k<Quote>)[""']?[^>]*>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>"; MatchCollection matchsLabelAll = Regex.Matches(html, rgLabelAll, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); if (matchsLabelAll.Count > 0) { string strLabelAll = matchsLabelAll[0].Value; //string regStr = "(?<=<customname id=\"" + itemP.Name + "\">(?:<[^<>]+>)*)[^<>]+(?=(?:<[^<>]+>)*</customname>)"; string regStr = "(?is)(?<=<customname id=\"" + itemP.Name + "\"><span[^>]*>)(?:(?!</?span\b).)+(?=</span></customname>)"; //MatchCollection matchsReg = Regex.Matches(html, regStr, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); MatchCollection matchsReg = Regex.Matches(strLabelAll, regStr, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); if (matchsReg.Count > 0) model.GetType().GetProperty(itemP.Name).SetValue(model, matchsReg[0].Value); else model.GetType().GetProperty(itemP.Name).SetValue(model, ""); } else model.GetType().GetProperty(itemP.Name).SetValue(model, ""); } }
根据html标签的ID获取匹配 该标签下的所有内容(包括标签的定义)
string rgDetailTableFirst = @"<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>[""']?)FULL_ITEMS_DETAIL_TABLE(?(Quote)\k<Quote>)[""']?[^>]*>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>"; MatchCollection matchsDetailTableFirst = Regex.Matches(html, rgDetailTableFirst, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); if (matchsDetailTableFirst.Count > 0) { string strDetailTableSourceFirst = matchsDetailTableFirst[0].Value;