在正则表达式模式中跳过HTML标签

2024-10-01 13:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个正则表达式模式(用python)来重新格式化这些模板引擎文件。在

基本上这个方案是这样的:

[$$price$$]
{
    <h3 class="price">
    $12.99
    </h3>
}

我试图让它删除任何额外的制表符\空格\新行,这样它应该是这样的:

^{pr2}$

我写的是:(\t |\s)+?除了在html标记中匹配外,它还能工作,所以h3变成h3class,我无法理解如何使它忽略标记内的任何内容。在


Tags: 文件标记引擎模板内容html模式方案
3条回答

使用正则表达式处理HTML非常容易出错;它们根本不是正确的工具。在

相反,使用HTML/XML感知库(例如lxml)来构建DOM样式的对象树;在适当的地方修改树中的文本段,并使用该库再次生成输出。在

艾伦

我不得不同意Charles的观点,即最安全的方法是解析HTML,然后只处理文本节点。听起来太过分了,但这是最安全的。在

另一方面,只要您相信HTML代码是正确的,regex中有一种方法可以做到这一点(例如,在标记中不包括无效的<;和>;,如:<;a title=“<;这是一个测试>;”href=“look here”>;…)

然后,您就知道,任何文本都必须在>;和<;之间,除了开头和结尾(如果您只是获取页面的快照,否则就有HTML标记的最小值)

所以。。。您仍然需要两个regex:找到文本'>;[^<;]+<;',然后应用前面提到的另一个regex。在

另一种方法,就是用这样的东西(没有测试过!)公司名称:

'(<;[^>;]*>;)|([\r\n\f]+)'

这将找到一个标记或空格。如果找不到一个标记,就不要用一个空的标记替换它。在

试试这个:

\r?\n[ \t]*

编辑:其思想是删除所有换行符(Unix:“\n”或Windows:“\r\n”)以及紧跟其后的任何水平空白(制表符或空格)。在

相关问题 更多 >