c# 正则 HTML

根据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;

 

转载于:https://www.cnblogs.com/Foodaholic/p/6020110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值