从html

时间:2017-02-28 21:15:53

标签: c# html regex

我有一个Html字符串,我想删除if和endif标记以及它之间的所有内容。

<![if ..]><style>...</style><![endif]>

我尝试过以下正则表达式:

<![if.*[endif]>
<!\\[if.*\\[endif\\]>

上面的正则表达式是否遗漏了一些特殊的方括号?

2 个答案:

答案 0 :(得分:1)

我认为你是对的。

输入:

<![if IE]>IE<br /><![endif]>
<![if IE 6]>IE 6<br /><![endif]>

模式:

<!\\[if.*\\[endif\\]>

匹配2次计数。

但我认为你的实际情况是“if”和“endif”在不同的行。所以你必须使用Singleline选项让Dot(。)包含新行。

输入:

<![if IE]>
    IE<br />
<![endif]>
<![if IE 6]>
    IE 6<br />
<![endif]>

模式(使用单行选项):

<!\\[if.*\\[endif\\]>

匹配1次。

匹配,但只有1个匹配所有字符串的计数。因为Dot(。)搜索以“[endif]&gt;”结尾的所有字符串最初没有停止“[endif]&gt;”字符串。

所以你必须使用?在第一场比赛时停止。

输入:

<![if IE]>
    IE<br />
<![endif]>
<![if IE 6]>
    IE 6<br />
<![endif]>

模式(使用单行选项):

<!\\[if.*?\\[endif\\]>

匹配2个计数。

此外,我认为您错误地使用了条件评论。

<![if ..]><style>...</style><![endif]>

应该改为

<!--[if ..]><style>...</style><![endif]-->

答案 1 :(得分:0)

html = Regex.Replace(html,@"(?is)<!\[if.*?\]>.*?<!\[endif\]>","");