Je vais avoir un problème correspondant à non HTML principalement des tags dans le texte, car les balises commence par <
et se termine par >
mais pas <
et >
. Donc, à la place <ref>xx</ref>
j'ai <ref>xxx</ref>
. Ce que je dois faire est de supprimer tous ces tags, y compris leur contenu.Supprimer les tags spéciaux non HTML à partir du texte
Le problème est que certaines étiquettes peuvent avoir des attributs. J'ai trouvé une bonne réponse here mais il y a toujours un problème.
En supposant que je tag comme: <gallery src=sss>xxx</gallery>
cette expression convient parfaitement:
@"<(?<Tag>\w+)[^>)]*>.*?</\k<Tag>>"
La réalité est tout à fait différent et tous les caractères spéciaux sont échappé, alors tag ressemble à: <gallery src=sss>xxx</gallery>
. Mon problème est de faire correspondre ce roi de tags. Jusqu'à présent, j'ai cette expression: @"\<\;(?<Tag>\w+)[^\&)]*\>\;.*?\<\;/\k<Tag>\>\;"
. Il correspond à des balises sans attributs, mais pas celle mentionnée ci-dessus. Qu'est-ce que je rate?
Le deuxième numéro correspond aux étiquettes {| |}
, car elles peuvent être imbriquées. Pouvez-vous m'aider avec ça aussi? Cette expression ne fait pas l'affaire: @"\{\|(?:[^\|\}]|\{\|[^\|\}]*\|\})*\|\}"
Modifier: Pour clarifier le deuxième problème. Je dois faire correspondre les chaînes qui commencent par l'ouverture {|
puis va du texte et se termine par |}
tags. Cette structure peut être imbriquée, ainsi: {| xxx {| yyy |} xxx |}
est autorisé. Je ne connais malheureusement pas le niveau d'imbrication maximum, mais disons que 1 convient à la plupart des cas.
Edit 2: Cette expression fonctionne pour mon 1er numéro @"\<\;(?<Tag>\w+).*?\<\;/\k<Tag>\>\;"
. J'ai remarqué qu'il échoue s'il y a une nouvelle marque de ligne entre l'ouverture et la fermeture des étiquettes.
Edit 3: Ce faire le travail avec la deuxième question: @"\{\|(?>(?!\{\||\|\}).|\{\|(?<N>)|\|\}(?<-N>))*(?(N)(?!))\|\}"
Utilisez RegexOption.Singleline pour qu'il fonctionne avec les sauts de ligne. Il sera traité comme un caractère d'espace. –