繁体   English   中英

用regex替换c#中的href,src

[英]Replacing href,src in c# with regex

我在wordpress博客中有一个内容标签,它将被移动到另一个标签不同的博客平台。

我被建议使用正则表达式,并且在阅读和替换href标签等方面存在问题。

这是wordpress内容标记:

<content>Bild 4. 
&lt;a href="http://www.mertidattleva.se/?attachment_id=63" rel="attachment wp-att-63"&gt;&lt;img class="alignright size-medium wp-image-63" alt="Uterum skapar mer" src="http://www.mertidattleva.se/wp-content/uploads/2013/04/016stor-300x200.jpg" width="300" height="200" /&gt;&lt;/a&gt;Spontant sett smidigt.</content>

这是新博客平台中的新标签,结果相同:

<content>Bild 4 br&amp;ouml;dtext
&lt;img src="/image.axd?picture=016stor-300x200.jpg" alt="Uterum skapar mer" /&gt;
</content>

如您所见,新博客平台的标签较少,我想从原始内容中删除此信息:

href="http://www.mertidattleva.se/?attachment_id=63" rel="attachment wp-att-63"&gt;&lt;img class="alignright size-medium wp-image-63" alt="Uterum skapar mer" src="http://www.mertidattleva.se/wp-content/uploads/2013/04

我试图用c#终止内容字符串:

string replacedString = Regex.Replace(line, @"(?<=href=)", "\"ww2\"");

但有更多的问题:我想删除href,rel,img类,src

我如何编码在c#regex中编码以获取文件016stor-300x200.jpg到新字符串?

我想重写文件也没有成功:

StreamWriter writer = new StreamWriter(file.DirectoryName + @"\" + file);
                        writer.WriteLine(replacedString);

通常,使用正则表达式来解析HTML是不值得的。 但在非常有限的情况下,它可能是有用的。 如果您的输入始终以相同的方式进行格式化,则可以使用它。 对于你的一个案例,这样的事情应该有效:

var regex = new Regex(@".*\/(.*\.jpg)");
var source = @"<content>Bild 4. 
&lt;a href=""http://www.mertidattleva.se/?attachment_id=63"" rel=""attachment wp-att-63""&gt;&lt;img class=""alignright size-medium wp-image-63"" alt=""Uterum skapar mer"" src=""http://www.mertidattleva.se/wp-content/uploads/2013/04/016stor-300x200.jpg"" width=""300"" height=""200"" /&gt;&lt;/a&gt;Spontant sett smidigt.</content>";

var dest = @"<content>Bild 4 br&amp;ouml;dtext
&lt;img src=""/image.axd?picture={0}"" alt=""Uterum skapar mer"" /&gt;
</content>";

var newString = string.Format(dest, regex.Match(source).Groups[1]);

而不是试图从原始字符串中删除您不想要的内容,而是集中精力提取您想要的内容。 你是/ .jpg的一部分,这就是我们分组的内容。 然后我们将我们提取的内容替换为新标签。

您可能想要添加一些错误检查。 例如,检查正则表达式是否确实匹配以及提取组。

小提琴

使用REGEX解析XML或HTML内容是一个坏主意
您可以使用XML Reader或linq来解析XML文件。
对于HTML文件,最好在.NET中使用htmlagilitypack
这里是循环遍历所有文件并更新href和src的完整示例
确保在分配或阅读vlaues之前检查空值

 string dirPath = @"c:\mydir";        
string[] htmlfiles = System.IO.Directory.GetFiles(dirPath, "*.HTML", SearchOption.AllDirectories);//Filter can be *.xml
        foreach (string filename in htmlfiles)
        {
            HtmlDocument document = new HtmlDocument();

            document.Load(filename);

        HtmlNodeCollection linknodes = document.DocumentNode.SelectNodes("//a");

            for (int i = 0; i < linknodes.Count; i++)
            {
                HtmlNode node = linknodes[i];
                var href = node.Attributes["href"].Value;
                //Reassigning href value
                node.Attributes["href"].Value ="put your replacement string";
            }


            HtmlNodeCollection imgnodes = document.DocumentNode.SelectNodes("//img");
            for (int i = 0; i < imgnodes.Count; i++)
            {
                HtmlNode node = imgnodes[i];
                var src = node.Attributes["src"].Value;
                //Reassigning href value
                node.Attributes["src"].Value = "put your replacement string";
            }

            document.Save(filename);
        }//end of loop all files

暂无
暂无

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

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