我正在寻找一个正则表达式语句,它可以让我从 XHTML 文档的 body 标签之间提取 HTML 内容。
我需要解析的 XHTML 将是非常简单的文件,我不必担心 JavaScript 内容或 <![CDATA[
标签,例如。
下面是我必须解析的 HTML 文件的预期结构。因为我确切地知道我将要处理的 HTML 文件的所有内容,所以这个 HTML 片段几乎涵盖了我的整个用例。如果我能得到一个正则表达式来提取这个例子的主体,我会很高兴。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
</head>
<body contenteditable="true">
<p>
Example paragraph content
</p>
<p>
</p>
<p>
<br />
</p>
<h1>Header 1</h1>
</body>
</html>
从概念上讲,我一直在尝试构建一个正则表达式字符串来匹配除内部正文内容以外的所有内容。有了这个,我会使用 C# Regex.Split()
获取正文内容的方法。我认为这个正则表达式:
((.|\n)*<body (.)*>)|((</body>(*|\n)*)
...可以解决这个问题,但它似乎根本不适用于我在 RegexBuddy 中的测试内容。
最佳答案
这行得通吗?
((?:.(?!<body[^>]*>))+.<body[^>]*>)|(</body\>.+)
当然,你需要添加必要的\s
为了考虑< body ...>
(带空格的元素),如:
((?:.(?!<\s*body[^>]*>))+.<\s*body[^>]*>)|(<\s*/\s*body\s*\>.+)
再三考虑,我不确定为什么我需要一个负面的前瞻......这也应该有效(对于格式良好的 xhtml 文档):
(.*<\s*body[^>]*>)|(<\s*/\s*body\s*\>.+)
关于c# - 提取 HTML 正文内容的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356340/