【问题标题】:How to replace the anchor tag text using C#?如何使用 C# 替换锚标记文本?
【发布时间】:2019-02-28 15:20:20
【问题描述】:

我正在尝试使用正则表达式替换锚标记值

Regex.Match(link, @"<a [^>]*>(.*?)</a>").Groups[1].Value.ToString(); 这给了我锚标记文本。

我尝试使用“Regex.replace”,但无法替换确切的文本。

例子:

var link="<a href="">Sample text </a>";
           var requiredText="new Text";         
           Regex.Replace(link,"<a [^>]*>(.*?)</a>",requiredText);

请帮我解决这个问题。

提前感谢您的帮助

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您正在捕捉组中的内容。

    您可能会做的是捕获组中左侧和右侧的内容,并在替换中使用这两个捕获组 $1$2

    var link=@"<a href="">Sample text </a>";
    var requiredText="$1new Text$2";
    link = Regex.Replace(link,"(<a [^>]*>).*?(</a>)",requiredText);
    Console.WriteLine(link);
    // <a href=">new Text</a>
    

    查看C# demo

    正则表达式将匹配:

    • (&lt;a [^&gt;]*&gt;)抓包1组
    • .*? 匹配任意字符 0+ 次
    • (&lt;/a&gt;)捕获组2

    【讨论】:

      【解决方案2】:

      如果锚标记的内容是纯文本(没有其他标记),您可以使用正向的后向和前向来实现这一点。通过不消耗锚的开始和结束标签,只会替换内容。

      /(?<=>)[^<]*(?=<\/a>)/
      

      Demo

      string anchor = "<a href=\"\">Sample text </a>";
      string requiredText = "new Text";
      anchor = Regex.Replace(anchor, @"(?<=>)[^<]*(?=<\/a>)", requiredText);
      Console.WriteLine(anchor); // <a href="">new Text</a>
      

      解释:

      • (?&lt;=&gt;) - 匹配前面的右尖括号(向后看)。
      • [^&lt;]* - 匹配并使用零个或多个不是左尖括号的字符。
      • (?=&lt;\/a&gt;) - 匹配后续的关闭锚标记(前瞻)。

      注意:我们不需要知道在lookbehind中打开了哪个标签,因为关闭锚标签必须关闭最后打开的标签。

      【讨论】:

        猜你喜欢
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 2013-03-28
        • 2011-04-17
        • 1970-01-01
        相关资源
        最近更新 更多