为什么我的regex不匹配html标签跨越多行,甚至当RegexOptions.使用多行

本文关键字:RegexOptions 我的 html 不匹配 标签 跨越 为什么 regex | 更新日期: 2023-09-27 18:17:39

我正在尝试从以下文本中删除标记:

<P style=""MARGIN: 0in 0in 0pt"" class=MsoNormal><SPAN 
style=""COLOR: #1f497d""><FONT size=3 face=Calibri> </FONT></SPAN></P>

注意它是如何在两行上的。所以当我尝试使用:

Regex _html = new Regex("<.*?>", RegexOptions.Multiline);
tempHtml = _html.Replace(tempHtml, string.Empty);

它匹配<p>, <font>, </font>, </span></p>标签,但似乎不匹配<span>标签。

我做错了什么?

为什么我的regex不匹配html标签跨越多行,甚至当RegexOptions.使用多行

RegexOptions.Multiline处理'Z'A的含义。如果.表示所有字符,包括换行(= true)或不包括换行(= false),则RegexOptions.Singleline将进行更改。

所以如果你想在你的标签中包含换行,使用RegexOptions.Singleline

但是,我同意Bryan Crosby的评论,他建议您使用htmllagilitypack来解析html而不是regex。

我不确定REGEX如何与c#一起工作,但大多数时候你必须转义<和>。这个模式在php中为我工作:

'<.*?'>

我想Fischermaen想说的是你使用了错误的选项,使用单行模式:

Regex _html = new Regex("<.*?>", RegexOptions.Singleline);
tempHtml = _html.Replace(tempHtml, string.Empty);

然后去下载Expresso,你可以很容易地尝试这些东西,并测试你的表达