Je dois convertir les attributs de style css en ligne en leurs équivalents de balises HTML. La solution que j'ai fonctionne mais fonctionne TRÈS lentement en utilisant l'espace de noms Microsoft .Net Regex et de longs documents (~ 40 pages de html). J'ai essayé plusieurs variantes mais sans résultats utiles. J'ai fait un peu de retour autour de l'exécution des expressions mais à la fin c'est juste la méthode regex intégrée qui est appelée. Je suis sûr que j'abuse de la gourmandise de la regex mais je ne suis pas sûr d'un moyen de contourner cela pour atteindre ce que je veux en utilisant une seule expression régulière.Expression régulière très lente lors de l'utilisation de documents volumineux
Je veux être en mesure d'exécuter les tests unitaires suivants:
[Test]
public void TestCleanReplacesFontWeightWithB()
{
string html = "<font style=\"font-weight:bold\">Bold Text</font>";
html = Q4.PrWorkflow.Helper.CleanFormatting(html);
Assert.AreEqual("<b>Bold Text</b>", html);
}
[Test]
public void TestCleanReplacesMultipleAttributesFontWeightWithB()
{
string html = "<font style=\"font-weight:bold; color: blue; \">Bold Text</font>";
html = Q4.PrWorkflow.Helper.CleanFormatting(html);
Assert.AreEqual("<b>Bold Text</b>", html);
}
[Test]
public void TestCleanReplaceAttributesBoldAndUnderlineWithHtml()
{
string html = "<span style=\"font-weight:bold; color: blue; text-decoration: underline; \">Bold Text</span>";
html = Q4.PrWorkflow.Helper.CleanFormatting(html);
Assert.AreEqual("<u><b>Bold Text</b></u>", html);
}
[Test]
public void TestCleanReplaceAttributesBoldUnderlineAndItalicWithHtml()
{
string html = "<span style=\"font-weight:bold; color: blue; font-style: italic; text-decoration: underline; \">Bold Text</span>";
html = Q4.PrWorkflow.Helper.CleanFormatting(html);
Assert.AreEqual("<u><b><i>Bold Text</i></b></u>", html);
}
[Test]
public void TestCleanReplacesFontWeightWithSpaceWithB()
{
string html = "<font size=\"10\" style=\"font-weight: bold\">Bold Text</font>";
html = Q4.PrWorkflow.Helper.CleanFormatting(html);
Assert.AreEqual("<b>Bold Text</b>", html);
}
Le expresion régulière J'utilise pour réaliser cette logique fonctionne, mais est très lent. Le regex dans le code C# ressemble à ceci:
public static IReplacePattern IncludeInlineItalicToITag(ICleanUpHtmlFactory factory)
{
return factory.CreateReplacePattern("(<(span|font) .*?style=\".*?font-style:\\s*italic[^>]*>)(.*?)</\\2>", "$1<i>$3</i></$2>");
}
public static IReplacePattern IncludeInlineBoldToBTag(ICleanUpHtmlFactory factory)
{
return factory.CreateReplacePattern("(<(span|font) .*?style=\".*?font-weight:\\s*bold[^>]*>)(.*?)</\\2>", "$1<b>$3</b></$2>");
}
public static IReplacePattern IncludeInlineUnderlineToUTag(ICleanUpHtmlFactory factory)
{
return factory.CreateReplacePattern("(<(span|font) .*?style=\".*?text-decoration:\\s*underline[^>]*>)(.*?)</\\2>", "$1<u>$3</u></$2>");
}
Avant de fournir une réponse, posez la question: Quelle version du framework .NET utilisez-vous? Si vous n'utilisez pas actuellement .NET 3.5, cela vaut-il la peine d'effectuer une mise à niveau? –