2016-05-11 9 views
1

Ich habe ein Content-Tag in WordPress Blog, die auf eine andere Blog-Plattform verschoben werden, wo die Tags unterschiedlich sind.Ersetzen von href, src in C# mit Regex

Ich habe empfohlen, Regex zu verwenden und Probleme beim Lesen und Ersetzen von href-Tags und so weiter. Hier

ist Wordpress Inhalt tag:

<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> 

Hier ist der neue Tag in neuer Blog-Plattform, das gleiche Ergebnis:

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

Wie Sie sehen neue Blog-Plattform weniger Tags hat, und ich will löscht diese Informationen aus dem ursprünglichen Inhalt:

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 

habe ich versucht, den Inhalt String Witz zu töten hC#:

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

aber mehr Problem: Ich möchte href, rel, img class löschen, src

Wie code ich Code in C# Regex Datei 016stor-300x200.jpg neue zu bekommen Schnur?

Ich mag die Datei auch ohne Erfolg neu zu schreiben:

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

Die wirkliche Frage hier ist, wer Ihnen geraten hat, Regex dafür zu verwenden. – Jonesopolis

+2

@Jonesopolis _he come_ – MikeTheLiar

+0

Jonesopolis - mein Chef hat –

Antwort

0

regex Verwendung von HTML zu analysieren ist, in der Regel nicht die Mühe wert. Aber in sehr begrenzten Fällen kann es nützlich sein. Wenn Ihre Eingabe immer auf die gleiche Weise formatiert ist, können Sie damit durchkommen. Für Ihre ein Fall, so etwas wie dies funktionieren sollte:

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

Anstatt zu versuchen, zu entfernen, was Sie nicht von Ihrer ursprünglichen Zeichenfolge wollen, konzentrieren sich auf das Extrahieren, was Sie wollen. Was Sie von / bis .jpg Teil sind, das ist, was wir gruppieren. Dann ersetzen wir einfach das, was wir extrahiert haben, in das neue Tag.

Sie können eine Fehlerüberprüfung hinzufügen. Überprüfen Sie beispielsweise, ob die Regex wirklich übereinstimmt und ob eine Gruppe extrahiert wird.

Fiddle

+0

Ok Fiddle scheint gut zu sein, aber wie kann ich die Datei mit dem Zielwert neu schreiben und das ursprüngliche href-Tag in der Datei löschen? Ich habe foreach Schleife viele XML-Dateien lesen und wenn ich alte Tags gelöscht habe, möchte ich neue Tags in Datei umschreiben. –

+0

Mit '@". * \/(. * \. Jpg) "' sind Sie sicher in Schwierigkeiten geraten. Gieriger Punktabgleich in einem markierten Dokument ist ein Regexuizid. [Ignorieren Sie Ihren Chef und verwenden Sie einen HTML-Parser.] (Http://StackOverflow.com/Questions/37164537/Replacing-HRef-SRC-in-C-Sharp-With-Reex?comment61865010_37164537) –

+0

@ WiktorStribiżew: Wie ich schon sagte * Für Ihren einen Fall *. Seit dem OP gab es keine weiteren Beispiele. Aber es sollte eigentlich kein Problem sein, da Sie das '/' davor anpassen müssen. –

0

Es ist eine schlechte Idee REGEX zu verwenden, XML oder HTML-Inhalt zu analysieren
Sie XML-Reader oder Linq verwenden können, um XML-Dateien zu analysieren.
für HTML-Dateien ist es besser, Sie htmlagilitypack in .NET
hier verwenden ist voll Beispiel eine Schleife durch alle Dateien und aktualisieren Sie die href und src
sicherstellen, dass die Nullwerte vor zuweisen oder Lesen vlaues überprüfen

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