繁体   English   中英

如何使用C#替换锚标记文本?

[英]How to replace the anchor tag text using C#?

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

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

我尝试使用“正则表达式替换”,但是我无法替换确切的文本。

例:

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

请帮我解决这个问题。

我在这里先向您的帮助表示感谢

您正在捕获组中的中间内容。

您可能要做的是捕获组中左右两侧的内容,并在替换中使用这两个捕获组$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#演示

正则表达式将匹配:

  • (<a [^>]*>)捕获组1
  • .*? 匹配任何char 0+次
  • (</a>)捕获组2

如果anchor标签的内容是纯文本(没有其他标签),则可以使用正向后看和前瞻来实现此目的。 通过不使用锚点打开和关闭标签,仅内容将被替换。

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

演示

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>

说明:

  • (?<=>) -与前面的右尖括号(向后看)匹配。
  • [^<]* -匹配并使用零个或多个不是尖括号的字符。
  • (?=<\\/a>) -匹配后续的封闭锚标记(超前)。

注意:我们不需要知道在后面查找中打开了哪个标签,因为关闭锚点标签必须关闭上一个打开的标签。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM