用正则表达式

时间:2016-05-11 13:43:24

标签: c# regex replace

我在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 class,src

如何在c#regex中编码以将文件016stor-300x200.jpg转换为新字符串?

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

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

2 个答案:

答案 0 :(得分:0)

通常,使用正则表达式来解析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的角色是什么,这就是我们正在分组的内容。然后我们只是将我们提取的内容替换为新标签。

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

Fiddle

答案 1 :(得分:0)

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

 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
相关问题