Ich weiß, dass die Verwendung von Regulären Ausdrücken, um HTML/XML zu parsen oder zu manipulieren, eine schlechte Idee ist und normalerweise würde ich es nie tun. Aber angesichts mangelnder Alternativen.Ersetze Text, der nicht in einem Tag enthalten ist, entweder mit Regex oder XmlParser
Ich muss Text innerhalb einer Zeichenfolge ersetzen, die nicht bereits Teil eines Tags (idealerweise ein span-Tag mit bestimmter ID) mit C#.
Zum Beispiel Nehmen wir an ich alle instaces von ABC im folgenden Text ersetzt werden soll, die nicht innerhalb einer Spanne mit Alternativtext (eine andere Spanne in meinem Fall) sind
ABC at start of line or ABC here must be replaced but, <span id="__publishingReusableFragment" >ABC inside span must not be replaced with anything. Another ABC here </span> this ABC must also be replaced
Ich versuchte regex mit beiden schauen nach vorne und schauen hinter die Behauptung. Verschiedene Kombinationen im Sinne von
string regexPattern = "(?<!id=\"__publishingReusableFragment\").*?" + stringToMatch + ".*?(?!span)";
haben aber darauf verzichtet.
Ich habe versucht, es in ein XElement zu laden und versuche, einen Schreiber von dort zu erstellen und Text nicht innerhalb eines Knotens zu bekommen. Aber das konnte ich auch nicht herausfinden.
Ich hoffe irgendwie den Schreiber zu verwenden, um die Zeichenfolgen zu erhalten, die nicht Teil eines Knotens sind, und sie zu ersetzen.
Grundsätzlich bin ich offen für irgendwelche Vorschläge/Lösungen, um dieses Problem zu lösen.
Vielen Dank im Voraus für die Hilfe.
Sieht gut aus. Aber was ist, wenn einige zusätzliche Attribute in der span-Tag hatte zB: ... Ich habe versucht, den Span Teil der Regex als ersetzen folgt <\ s * span. *? id = "" __ publishingReusableFragment "". *?> Aber jetzt passt es nicht nach dem Ende der span-Tag - ... dieses ABC ... – Chaitanya
Sie beginnen zu ran an all die Gründe, warum das Parsen von HTML mit Regexes keine gute Idee ist. Wenn Ihre Attribute niemals ein '>' enthalten, können Sie '<\s*span[^>] * id =" "__ publishingReusableFragment" "[^>] *>' verwenden und auf das Beste hoffen. –
Yup, das war es, danke. Yeah, weshalb ich gehofft hatte, dass es mit LinqToXML oder einer guten LinqToHtml-Lib funktionieren könnte. Dies ist nur ein Wegwurf, ein Tool zum Importieren, das einige Daten auf dem Weg einlesen muss, um die manuelle Nachbearbeitung zu reduzieren. – Chaitanya