使用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。”