用于在HTML字符串中解析自定义字段的自定义正则表达式

时间:2013-03-11 13:13:00

标签: c# regex string

我在隐藏字段中发送一些html,在服务器端我将使用正则表达式解析它。目前我能够解析

<div id="4059">asd</div>

并且下面的代码在match.Groups [4]中的match.Groups [2]和“4059”中给出了“id”,“div”在第一个索引处出现,而第3个变为空。

string regex2 = @"<(?<Tag_Name>(a)|div)\b[^>]*?\b(?<URL_Type>(?(1)id))\s*=\s*(?:""(?<URL>(?:\\""|[^""])*)""|'(?<URL>(?:\\'|[^'])*)')";
var matches = Regex.Matches(myDiv, regex2, RegexOptions.IgnoreCase | RegexOptions.Singleline);
var links = new List<string>();
foreach (Match item in matches)
{
  if (item.Groups[2].Value == "div")
     {
       employee.ID = item.Groups[4].Value;
     }
]

有人可以编辑这个正则表达式,

<(?<Tag_Name>(a)|div)\b[^>]*?\b(?<URL_Type>(?(1)id))\s*=\s*(?:""(?<URL>(?:\\""|[^""])*)""|'(?<URL>(?:\\'|[^'])*)')

这样我就可以解析了

<div id="5094" fieldA="asd" fieldB="def" fieldC="ghi"></div>

也可以添加字段。

我还应该在这里提一下,我正在开发一个自定义控件,当我在项目中添加它时,我不能使用HTML AGILITY PACK作为程序集冲突。

1 个答案:

答案 0 :(得分:0)

如果你已经知道字符串只包含<div field="value" field="value" ...></div>(即字符串中只有这个div),那么只需简化你的正则表达式来挑选字段和值,并在循环中运行它: / p>

string regstr = @"\s+(?<field>[^\s=]+)\s*=\s*\"(?<value>[^\"]+)\"";
var reg = new Regex(regstr);
var m = reg.Match(myDiv);
while (m.Success)
{
    // m.Groups["field"] and m.Groups["value"] hold your field and value
    // get the next match
    m = m.NextMatch();
}