0

可能重复:
使用 C# 正则表达式删除 HTML 标记

我正在尝试编写仅返回 HTML 文件内容的代码。我认为最好的方法是围绕消除 < ..> 括号内的所有元素,或者列出 >...< 括号之间的所有文本。我对正则表达式很陌生,但我很确定它们是要走的路。

这是我尝试过的代码

        Regex reg = new Regex(@"<.*>");
        file = reg.Replace(file, ""); 

只要在一块文本之前只有一个 <...> ,它就可以工作。任何按顺序包含两个或更多这些元素的文件,例如 <...><...>,它会开始删除它找到的任何文本。有人可以告诉我我做错了什么吗?

4

2 回答 2

0

正则表达式通常是贪婪的(它们匹配他们能找到的最长的字符串)。尝试根据您要查找的语言检查 +? 或者 *?运算符,它将尝试最短匹配。否则,您必须构建另一个正则表达式。

于 2012-09-25T19:18:14.230 回答
0

好吧,你得到的意外行为是因为你的正则表达式是贪婪的

如果您将正则表达式更改为

    Regex reg = new Regex(@"<.*?>");
    file = reg.Replace(file, ""); 

你会得到你所期望的。

另外,知道 Regex 不处理嵌套,HTML 有很多,我会避免使用 Regex 来解析 HTML,除非你试图匹配一个非常具体的东西,在一个特别形成的 html 上。

于 2012-09-25T19:18:45.353 回答