c # Regex problem - PullRequest
       12

c # Regex problem

1 голос
/ 26 февраля 2009

Я хочу найти значение в строке, как это

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

мне нужно name = "" value and value = "" value: P создать этот код, но этот код не работает

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=", "");
            }

ошибка

Form1.cs (71,69): ошибка CS1009: нераспознанная escape-последовательность

в этой строке

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

Ответы [ 4 ]

4 голосов
/ 26 февраля 2009

Regex не всегда лучший инструмент для HTML; Я бы использовал HTML Agility Pack (поскольку это не xhtml) и xpath - тогда это должно быть довольно тривиально:

    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;
1 голос
/ 26 февраля 2009

Вам нужно поставить @ перед каждой частью строки:

Regex rloginRnd = new Regex(@"name="+ loginrand+@"value=\w*");
1 голос
/ 26 февраля 2009

использование
Regex rloginRnd = new Regex(@"name="+ loginrand+@"*value=\w**");
Примечание: второй знак @

или
Regex rloginRnd = new Regex(@"name="+ loginrand+"*value=\\w**");
Примечание: Двойной \ перед ш

0 голосов
/ 26 февраля 2009

Не думаю, что @ охватывает всю конкатенацию строк, только бит, на котором она включена.

Try.

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

или

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

или используйте string.format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...