我如何使用Regex从html doc中提取正文, 考虑到html和body标签可能是大写,小写或可能不存在?
答案 0 :(得分:13)
这样的事情怎么样?
它会将<body></body>
个标记(由于RegexOptions.IgnoreCase
而不区分大小写)之间的所有内容捕获到名为theBody
的组中。
RegexOptions.Singleline
允许我们将多行HTML作为单个字符串处理。
如果HTML不包含<body></body>
标记,则匹配的Success
属性将为false。
string html;
// Populate the html string here
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline;
Regex regx = new Regex( "<body>(?<theBody>.*)</body>", options );
Match match = regx.Match( html );
if ( match.Success ) {
string theBody = match.Groups["theBody"].Value;
}
答案 1 :(得分:10)
不要使用正则表达式 - 使用类似Html Agility Pack。
的内容这是一个敏捷的HTML解析器 构建一个读/写DOM并支持 普通的XPATH或XSLT(实际上你 不必了解XPATH也不了解 使用XSLT,不用担心......)。它是 允许您使用的.NET代码库 解析“out of the web”HTML文件。该 解析器非常宽容“真实 世界“格式错误的HTML。对象 模型与提出的非常相似 System.Xml,但用于HTML文档(或 流)。
然后,您可以使用XPATH提取body
。
答案 2 :(得分:0)
这应该让你非常接近:
(?is)<body(?:\s[^>]*)>(.*?)(?:</\s*body\s*>|</\s*html\s*>|$)