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

时间:2012-10-09 03:13:51

标签: 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.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"));

有人可以帮助我。

由于

2 个答案:

答案 0 :(得分:0)

我可以看到可能导致问题的两件事。首先,你的正则表达式正在检查格式为href=http://example.com的字符串。请注意,URL周围没有引号。因此,我们需要更新正则表达式以处理输入包含的双引号。

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

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

href="([^"]+)"

在您的变量中,它看起来像:

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

答案 1 :(得分:0)

看一下这个例子:

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();

希望你明白了。