0

非表示のフィールドにいくつかの html を送信しています。サーバー側では、正規表現で解析しています。現在、私は解析することができます

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

以下のコードは、match.Groups[2] の「id」と match.Groups[4] の「4059」を提供します。「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 を使用できないこともここで言及する必要があります。

4

1 に答える 1

0

文字列にのみが含まれていることが既にわかっている場合<div field="value" field="value" ...></div>(つまり、文字列にこの div しかない場合)、正規表現を単純化してフィールドと値を選択し、ループで実行します。

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();
}
于 2013-03-11T13:28:59.200 に答える