【问题标题】:c# Regex problemc# 正则表达式问题
【发布时间】:2009-02-26 12:21:00
【问题描述】:

我想像这样在行中搜索一个值

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

我需要 name="" value 和 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:无法识别的转义序列

在这一行

正则表达式 rloginRnd = new Regex(@"name="+ loginrand+"***value=\w****");

【问题讨论】:

  • regex html 再次来袭

标签: c# regex


【解决方案1】:

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;

【讨论】:

    【解决方案2】:

    您需要在字符串的每个部分之前放置一个@

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

    【讨论】:

    • 我这样做了,但没有任何回报
    • 我不是很肯定,但我认为问题在于您不需要在第二个正则表达式中搜索“name=”,因为这已经在第一个正则表达式中处理好了.
    【解决方案3】:

    使用
    Regex rloginRnd = new Regex(@"name="+ loginrand+@"*value=\w**");
    注意:第二个@符号


    Regex rloginRnd = new Regex(@"name="+ loginrand+"*value=\\w**");
    注意:在 w 前加倍 \

    【讨论】:

      【解决方案4】:

      我不认为 @ 涵盖了整个字符串连接,只涵盖了它所在的位。

      试试吧。

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

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

      或使用 string.format

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多