2009-02-26 16 views
1

i einen Wert suchen möchten in auf Zeile wie dieseC# Regex Problem

<p align="center"><input type="hidden" name="e79e7ec" value="15302f565b"> 

i Frage Name = "" Wert und value = "" Wert: P diesen Code erstellen, aber dieser Code dosent Arbeit

Regex rloginRand = new Regex(@"<p align=center><input type=hidden name=\w*"); 
      Match mloginRand = rloginRand.Match(source); 
      string loginrand = ""; 
      if (mloginRand.Success) 
      { 
       loginrand = mloginRand.ToString().Replace("<p align=center><input type=hidden name=", ""); 
      } 
      string loginrnd = ""; 
      Regex rloginRnd = new Regex(@"name="+ loginrand+"value=\w*"); 
      Match mloginRnd = rloginRnd.Match(source); 

      if (mloginRand.Success) 
      { 
       loginrnd = mloginRnd.ToString().Replace("name="+loginrand+" value=", ""); 
      } 

Fehler

Form1.cs (71,69): Fehler CS1009: Unbekanntes Escape-Sequenz

an dieser Linie

Regex rloginRnd = neuer Regex (@ "name =" + loginrand + "*** value = \ w ****");

+0

regex html schlägt wieder – annakata

Antwort

1

Sie benötigen einen @ vor jedem Teil der Zeichenfolge zu setzen:

Regex rloginRnd = new Regex(@"name="+ [email protected]"value=\w*"); 
+0

ich das tun, aber nichts returend – madman

+0

ich nicht positiv bin, aber Ich denke, das Problem ist, dass Sie in der zweiten Regex nicht nach "name =" suchen müssen, da dies bereits in der ersten Regex erledigt wurde. – Andy

1

Verwendung
Regex rloginRnd = new Regex(@"name="+ [email protected]"*value=\w**");
Hinweis: Second @ -Zeichen

oder
Regex rloginRnd = new Regex(@"name="+ loginrand+"*value=\\w**");
Hinweis: Doppel \ vor w

0

Ich denke nicht, dass das @ die gesamte String-Konkationierung abdeckt, nur das Bit, auf dem es steht.

Versuchen.

Regex rloginRnd = new Regex(@"name="+ loginrand+ @"*value=\w**"); 

oder

Regex rloginRnd = new Regex(@"name="+ loginrand+ "*value=\\w**"); 

oder verwenden string.format

4

Regex ist nicht immer das beste Werkzeug für HTML; Ich würde verwenden die HTML Agility Pack (da es nicht xhtml ist) und XPath - es sollte ziemlich trivial dann:

HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml(html); 
    HtmlNode node = doc.DocumentNode.SelectSingleNode("input"); 
    // read (if you want) 
    string name = node.GetAttributeValue("name", ""), 
     value = node.GetAttributeValue("value", ""); 
    // wipe 
    node.SetAttributeValue("name", loginrand); 
    node.SetAttributeValue("value", ""); 
    // get html 
    html = doc.DocumentNode.OuterHtml;