【问题标题】:C# Regex remove hrefC# 正则表达式删除href
【发布时间】:2014-08-15 00:36:59
【问题描述】:

所以基本上我想删除href,即:

<td class="name"><a href="/leagues/euw/633">Apdo Dog2</a></td>

所以我只想要文本的Apdo Dog2 部分。有什么想法吗?

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SITE");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    StreamReader stream = new StreamReader(response.GetResponseStream());

    string final_response = stream.ReadToEnd();

    Regex r = new Regex(@"\<[^\>]+\>(.[^\<]+)</[^\>]+\>", RegexOptions.Singleline);
    Match m = r.Match(final_response);

    richTextBox1.Text = m.Value;

【问题讨论】:

  • 你真的应该使用像HtmlAgilityPack 这样的东西。有大量的 HTML 会破坏普通的正则表达式。

标签: c# regex


【解决方案1】:

有什么想法吗?是的,您应该使用 HtmlAgilityPack 之类的解析器来提取这些值。

括号字符不需要转义,这些字符没有特殊含义。但是,主要问题是点. 删除它。然后使用 Match.Groups Property 联系该组以获取您的匹配结果。

Regex r = new Regex(@"<[^>]+>([^<]+)</[^>]+>");
Match m = r.Match(final_response);
richTextBox1.Text = m.Groups[1].Value;

注意:点 . 已被删除,并且您正在使用否定类,因此您可以删除 dotall 修饰符。

Working Demo

【讨论】:

  • 很好,如果我想要多行输出,我应该添加什么?
  • 使用 Regex.Matches 方法。
  • 我尝试了它并将其作为输出:i.imgur.com/wsho8Yo.png 你知道为什么吗?有点奇怪
  • 如果你只想要内容值,试试Regex r = new Regex(@"&lt;a[^&gt;]*&gt;([^&lt;]+)&lt;/a&gt;");
【解决方案2】:

你可以使用这个正则表达式:

<a.*?>(.*?)<\/a>

Working demo

【讨论】:

    【解决方案3】:

    你可以看看my answer here,我猜你也可以做类似的事情。

    唯一的区别是您将删除/删除包括括号在内的所有内容。

    除此之外,请记住,普遍的共识是不要将 RexEx 与 HTML 混合 :)

    这应该可行:

    void Main()
    {
        // your input
        String input = @@"<td class=""name""><a href=""/leagues/euw/633"">Apdo Dog2</a></td>";
        // temp variables
        StringBuilder sb = new StringBuilder();
        bool inside = false;
        bool delete = false;
        // analyze string
        for (int i = 0; i < input.Length; i++)
        {
            // Special case, start bracket
            if (input[i].Equals('<')) { 
                inside = true;
    
            }
            // special case, close bracket
            else if (input[i].Equals('>')) {
                inside = false;
                continue;
            }
    
            // add if needed
            if (!inside)
                    sb.Append(input[i]);
        }
        var result = sb.ToString(); // -> holds: "Apdo Dog2"
    }
    

    【讨论】:

    • 这应该做什么?这似乎没有回答问题
    • 对于:&lt;td class="name"&gt;&lt;a href="/leagues/euw/633"&gt;Apdo Dog2&lt;/a&gt;&lt;/td&gt;,它会给你Apdo Dog2
    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2011-08-11
    • 2019-08-20
    相关资源
    最近更新 更多