je les suivantes 2.0 VB.Net dans une application ASP.Net:.Net Regex groupe de correspondance et la répétition question
output = Regex.Replace(output, "<p>(?:(?:\<\!\-\-.*?\-\-\>)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>", String.Empty, RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Singleline)
stuff exemple, il correspond bien:
<p></p>
<p> </p>
<p><br/><br/></p>
<p><!-- comment --><!-- comment --></p>
<p> </p>
<p><br/> </p>
<p><!-- comment --><br/><!-- comment --></p>
<p> <br/></p>
Des exemples de choses que je voudrais correspondre, mais il ne possède pas:
<p > <!--[if !supportLineBreakNewLine]--><br /> <!--[endif]--></p>
Comment faire en sorte que les groupes et les répétitions fonctionnent comme je le veux?
Editer: oups, j'ai oublié le groupe de commentaires. Édition 2: oups, a oublié un échec. Édition n ° 3: exemples fixes. Edit # 4: regex mis à jour en fonction des réponses
Conclusion:
Voici mes résultats étalonnés pour les trois réponses. Depuis trois correspondent maintenant tout ce que je couru chacun à travers 10.000 itérations sur un bloc de texte:
Mine:
<p\s*>(?:(?:<!--.*?-->)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>
6.312
Gumbo:
<p\s*>(?:[\s\u00A0]+|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|<!--(?:[^-]+|-(?!-))*-->)*</p>
6.05
steamer25:
<p\s*>(?:(?:\ \;)|(?:\&\#0*160\;)|(?:<br\s*/?>)|\s|\u00A0|<!\-\-[^(?:\-\-)]*\-\->)*</p>
6.121
de Gumbo était le plus rapide, donc je vais marquer son comme la bonne réponse.
Qu'est-ce que vous essayez de faire? –
J'essaie de supprimer toutes les balises P du contenu html qui contiennent uniquement: des commentaires html, des espaces insécables, des éléments BR ou des espaces. – travis