删除所有HTML标记和格式(RegEx)

时间:2009-03-10 09:08:51

标签: c# asp.net

我有想要在飞行中修改的RSS源,我需要的只是文本(和换行符)所以其他一切都必须删除(所有图像,样式,链接)

如何使用ASP.NET c#

轻松完成此操作

4 个答案:

答案 0 :(得分:5)

Regex无法解析XML。不要使用正则表达式来解析XML。不要过去Go。不要收200英镑。

您需要一个合适的XML解析器。将RSS加载到XMLDocument,然后使用innerText仅获取文本内容。

请注意,即使您从RSS中提取了描述内容,它也可以包含活动HTML。那就是:

<description> &lt;em&gt;Fish&lt;/em&gt; &amp;amp; chips </description>

可以在正确解析为XML然后作为文本读取时为您提供文字字符串:

<em>Fish</em> &amp; chips

或,标记:

  

&amp;芯片

关于RSS的有趣之处在于你并不知道哪个是对的。在RSS 2.0中,它是明确的HTML标记(第二种情况);在其他版本中没有指定。通常,您应该假设描述可以包含实体编码的HTML标记,如果您想进一步从最终文本中删除它们,则需要进行第二次解析步骤。

(不幸的是,由于这是遗留的HTML而不是XML,因此难以解析;正则表达式将比解析XML更加无用。在.NET中没有内置的HTML解析器,但有第三方库,例如HTML Agility Pack。)

答案 1 :(得分:0)

string pattern = @"<(.|\n)*?>";
return Regex.Replace(htmlString, pattern, string.Empty);

答案 2 :(得分:0)

小心 - 你不想假设你收到的html格式正确:

public static string ClearHTMLTagsFromString(string htmlString)
{
    string regEx = @"\<[^\<\>]*\>";
    string tagless = Regex.Replace(htmlString, regEx, string.Empty);

    // remove rogue leftovers
    tagless = tagless.Replace("<", string.Empty).Replace(">", string.Empty);

    return tagless;
}

答案 3 :(得分:0)

我在JavaScript中为一个项目做了与上面大致相同的事情:

var thisText = '';
thisText = document.getElementById('textToStrip').value;
var re = new RegExp('<(.|\\n)*?>', 'igm');
thisText = thisText.replace(re, '');