c# - 提取 HTML 正文内容的正则表达式

标签 c# html regex xhtml

我正在寻找一个正则表达式语句,它可以让我从 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>
      &nbsp;
    </p>
    <p>
      <br />
      &nbsp;
    </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/

相关文章:

c# - 在某些行上使用.Distinct()

javascript - 在 div 中输入输入文本,但不交换旧文本

html - ABBR HTML 标记的标题和内容中的不同语言

html - 在我的选项卡标记中放置 aria-controls 属性的位置

c# - 如何在 .js 文件中嵌入 Razor C# 代码?

c# - 在 C# 中运行存储过程,传递参数并捕获输出结果

c# - 从 Core 2.0 更新到 3.1.1 后响应正文为空

mysql - 通过正则表达式匹配进行 SQL 查询

Mysql正则表达式查找固定长度的单词

javascript - 仅用第二个字符替换两个字符的任意组合