Je sais que l'utilisation d'expressions régulières pour analyser ou manipuler HTML/XML est une mauvaise idée et je ne le ferais jamais. Mais compte tenu du manque d'alternatives.Remplacer le texte non contenu dans un tag en utilisant Regex ou XmlParser
J'ai besoin de remplacer le texte à l'intérieur d'une chaîne qui ne fait pas déjà partie d'une étiquette (idéalement une étiquette d'étendue avec un ID spécifique) en utilisant C#.
Par exemple, disons que je veux remplacer tous les instaces de ABC dans le texte suivant, qui ne sont pas dans une période avec le texte alternatif (une autre span dans mon cas)
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
J'ai essayé d'utiliser regex avec les deux regardent devant et regardent derrière l'assertion. Diverses combinaisons le long des lignes de
string regexPattern = "(?<!id=\"__publishingReusableFragment\").*?" + stringToMatch + ".*?(?!span)";
mais ont abandonné là-dessus.
J'ai essayé de le charger dans un XElement et d'essayer de créer un script à partir de là et d'obtenir du texte à l'intérieur d'un nœud. Mais ne pouvait pas comprendre cela non plus.
XElement xel = XElement.Parse("<payload>" + inputString + @"</payload>");
XmlWriter requiredWriter = xel.CreateWriter();
J'espère en quelque sorte d'utiliser l'écrivain pour obtenir les chaînes qui ne font pas partie d'un nœud et de les remplacer. Fondamentalement, je suis ouvert à toutes les suggestions/solutions pour résoudre ce problème.
Merci d'avance pour l'aide.
Ça a l'air bien. Mais qu'en est-il s'il y avait des attributs supplémentaires dans la balise span, par exemple: ... ... J'ai essayé de remplacer la partie span de la regex suit <\ s * span. *? id = "" __ publishingReusableFragment "". *?> Mais maintenant, il ne correspond pas après la fin de la balise span - ... this ABC ... – Chaitanya
Vous commencez à courir dans toutes les raisons pour lesquelles l'analyse HTML avec regex n'est pas une bonne idée. Si vos attributs ne contiennent jamais un '>', vous pouvez utiliser '<\s*span[^>] * id =" "__ publishingReusableFragment" "[^>] *>' et espérer le meilleur. –
Ouais, c'était tout, merci. Ouais, c'est pourquoi j'espérais que marcher avec LinqToXML ou une bonne librairie LinqToHtml pourrait être une idée. Il ne s'agit que d'un outil d'importation unique, qui doit fournir des données pour réduire le post-traitement manuel. – Chaitanya