我正在尝试使用正则表达式替换锚标记值
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);
请帮助我解决这个问题。
感谢您的提前帮助
答案 0 :(得分:2)
您正在捕获组中的中间内容。
您可能要做的是捕获一个组中左右两侧的内容,并在替换中使用这两个捕获组$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
正则表达式将匹配:
(<a [^>]*>)
捕获第1组.*?
匹配任何char 0次以上(</a>)
捕获第2组答案 1 :(得分:0)
如果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>)
-匹配后续的封闭锚标记(超前)。NB:我们不需要知道在后面的外观中打开了哪个标签,因为闭合锚标签必须正在闭合最后打开的标签。