۱۳۸۸/۰۶/۰۵

حذف تمامي تگ‌ها منهاي چند تگ خاص از HTML‌ دريافتي


در ادامه مطلب "عبارات باقاعده‌اي در مورد كار با تگ‌ها" ، عبارت باقاعده مربوطه به حذف تمامي تگ‌ها براي فرمت زدايي يك متن بسيار جالب است اما مشكلي را كه به وجود خواهد آورد،‌ از بين بردن سطرهاي موجود است. به عبارت ديگر با استفاده از اين عبارت با قاعده، كل متن در امتداد يك سطر قرار مي‌گيرد. اكنون مي‌خواهيم تمامي تگ‌ها منهاي دو تگ مربوط به p و br حذف شوند. چه بايد كرد؟

private static readonly Regex _pbrRegex = new Regex(@"<(?!br|/br|p|/p).+?>",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
/// <summary>
/// حذف تمامي تگ‌ها منهاي دو تگ ذكر شده
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static string CleanTagsExceptPbr(string html)
{
return _pbrRegex.Replace(html, string.Empty);
}
و اگر بخواهيم يك سري تست براي آن بنويسيم به موارد زير مي‌توان اشاره كرد:

using NUnit.Framework;

namespace testWinForms87
{
[TestFixture]
public class CTestRegExHelperPbr
{
[Test]
public void TestCleanTagsExceptPbr1()
{
Assert.AreEqual(
CRegExHelper.CleanTagsExceptPbr("<b>data1</b><br/>data2"),
"data1<br/>data2");
}

[Test]
public void TestCleanTagsExceptPbr2()
{
Assert.AreEqual(
CRegExHelper.CleanTagsExceptPbr("<b>data1</b><br>data2"),
"data1<br>data2");
}

[Test]
public void TestCleanTagsExceptPbr3()
{
Assert.AreEqual(
CRegExHelper.CleanTagsExceptPbr("<p><b>data1</b><br/>data2</p>"),
"<p>data1<br/>data2</p>");
}

[Test]
public void TestCleanTagsExceptPbr4()
{
Assert.AreEqual(
CRegExHelper.CleanTagsExceptPbr("<b>data1</b><p>data2<br />"),
"data1<p>data2<br />");
}
}
}