2024-10-01 13:37:25 发布
网友
我正在尝试编写一个正则表达式模式(用python)来重新格式化这些模板引擎文件。在
基本上这个方案是这样的:
[$$price$$] { <h3 class="price"> $12.99 </h3> }
我试图让它删除任何额外的制表符\空格\新行,这样它应该是这样的:
我写的是:(\t |\s)+?除了在html标记中匹配外,它还能工作,所以h3变成h3class,我无法理解如何使它忽略标记内的任何内容。在
使用正则表达式处理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”)以及紧跟其后的任何水平空白(制表符或空格)。在
使用正则表达式处理HTML非常容易出错;它们根本不是正确的工具。在
相反,使用HTML/XML感知库(例如lxml)来构建DOM样式的对象树;在适当的地方修改树中的文本段,并使用该库再次生成输出。在
艾伦
我不得不同意Charles的观点,即最安全的方法是解析HTML,然后只处理文本节点。听起来太过分了,但这是最安全的。在
另一方面,只要您相信HTML代码是正确的,regex中有一种方法可以做到这一点(例如,在标记中不包括无效的<;和>;,如:<;a title=“<;这是一个测试>;”href=“look here”>;…)
然后,您就知道,任何文本都必须在>;和<;之间,除了开头和结尾(如果您只是获取页面的快照,否则就有HTML标记的最小值)
所以。。。您仍然需要两个regex:找到文本'>;[^<;]+<;',然后应用前面提到的另一个regex。在
另一种方法,就是用这样的东西(没有测试过!)公司名称:
'(<;[^>;]*>;)|([\r\n\f]+)'
这将找到一个标记或空格。如果找不到一个标记,就不要用一个空的标记替换它。在
试试这个:
编辑:其思想是删除所有换行符(Unix:“\n”或Windows:“\r\n”)以及紧跟其后的任何水平空白(制表符或空格)。在
相关问题 更多 >
编程相关推荐