使用C#提取并替换href属性值

使用C#提取并替换href属性值,c#,regex,href,C#,Regex,Href,我有以下一组图像地图标签 <map name="planetmap"> <area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun"> <area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury"> <area shape="circle" coords="124,58,8" href="venus.

我有以下一组图像地图标签

<map name="planetmap">
  <area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun">
  <area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury">
  <area shape="circle" coords="124,58,8" href="venus.htm" alt="Venus">
</map>

我需要提取href属性并用另一个url替换它

我使用以下代码,但似乎不工作

string input = @"<area shape=""rect"" href=""http://www.google.com"">";
            string pattern = "(href=([^ ]+))";
Regex rgx = new Regex(pattern);
string result2 = rgx.Replace(input, m => m.Groups[1].Value.Replace(result,"test.com"));
string input=@”;
字符串模式=“(href=([^]+)”;
正则表达式rgx=新正则表达式(模式);
字符串result2=rgx.Replace(输入,m=>m.Groups[1].Value.Replace(结果,“test.com”);
谁能帮帮我吗


谢谢

我发现有两件事可能会引起问题。首先,您的正则表达式正在检查
href格式的字符串=http://example.com
。注意,URL周围没有引号。因此,我们需要更新正则表达式来处理输入中包含的双引号

第二个问题是,您使用的是匹配的组
1
,但您的正则表达式实际上匹配了两个单独的组(您希望替换第二个组)。您根本不需要第一个匹配组,因此我们可以删除此部分

总之,请尝试将正则表达式更新为:

href="([^"]+)"
在您的变量中,它将如下所示:

string pattern = @"href=""([^""]+)""";

看看这个例子:

StreamReader reader = new StreamReader("D:\\stack.html");
string testString = reader.ReadToEnd();

string replacedString = Regex.Replace(testString, @"(?<=href=).+?(?=\s)", "\"test.com\"");

StreamWriter writer = new StreamWriter("D:\\stack1.html");
writer.WriteLine(replacedString);

writer.Close();
reader.Close();
StreamReader=newstreamreader(“D:\\stack.html”);
string testString=reader.ReadToEnd();

string replacedString=Regex.Replace(testString,@)(?请准确描述“它不工作”的含义“,这对回答问题的人很有帮助。如果你只有一个href,它会起作用。如果你有多个href,它就不会起作用。我对regex不熟悉,经常让我感到困惑。不,它会取代所有href。谢谢我使用了你的解决方案来改进我的href。”