Afs*_*bbi 4 html regex xpath parsing html-parsing
我想解析HTML文本并找到特殊部分.例如,在第3文本div1日row和2日column的table.我有两个解析选项:正则表达式和XPath.每个人的优点和缺点是什么?
谢谢
这在某种程度上取决于你是否拥有一个完整的HTML文件,其中包含未知但格式良好的内容,而不仅仅是一段完全已知内容的片段或HTML,这些内容可能是也可能是格式不正确的.
你知道,编辑和解析之间存在差异.
编辑自己编写的HTML文件是一回事,或者正在面对其他人,并发出编辑器命令
:100,200s!<br */>!!g
Run Code Online (Sandbox Code Playgroud)
从200-300行中删除中断.
吸掉URL碰巧出现在URL另一端的任何HTML然后尝试去理解它,看不见它是另一回事.
首先要求使用正则表达式解决方案 - 实际上是上面显示的解决方案.为了完成上面显示的简单编辑只是为了完成上面所示的简单编辑,要编写一些大量过度工程的庞然大物进行秋季解析来设置整个解析树是完全错误的.这也是它自己的惩罚.
另一方面,使用模式来解析(而不是lex out)整个HTML文档,它可以包含你不打算做的各种糟糕的事情,只是为了利用别人的努力工作来重新创建轮子你自己,而且很糟糕.
然而,还有一些人没有人愿意提及,那就是大多数人都不能胜任正则表达式.他们并不真正理解他们.他们不知道如何测试或制作它们.他们不知道如何使它们可读和可维护.
问题的真相是,绝大多数正则表达式用户甚至无法管理使用正则表达式匹配任意HTML标记这样简单和基本的事情,即使事情变得像备用编码和CDATA部分,并重新定义了权限和<script>内容,而且从来没有过时 - 这些形式都安全地免除.
这不是因为它很难做到; 实际上并非如此.只是尝试这样做的人们既不理解正则表达式也不理解HTML,并且他们不知道他们不知道,所以他们比他们意识到的更快地让自己超越他们的头脑.然后他们手上有一场彻底的灾难.
此外,它已经完成,并且正确.不妨从别人的错误中学习改变,是吗?拥有一些罐装正则表达式可能有助于您经常操作.这对编辑特别有用.
但是对于完整的解析,你真的不应该尝试在你的模式中嵌入一个完整的HTML语法.老实说,你真的不应该.说到某人实际上可以并且已经做到了这一点,我不同于99.9999%的响应者,在这方面,当我提出反对意见时,这个领域的实际经验的可信度.当然,我可以做到,但我几乎从不想,而且我当然不希望你在家里无人监督地尝试它.对于可能造成的任何损害,我不承担任何责任.:)
当然,这可能听起来像"像我说的那样,而不是像我一样",但如果你的正则表达精通程度达到允许你思考这种事情的水平,你就不会问这个问题.正如我所提到的,几乎没有人使用正则表达式实际上可以匹配任意HTML标记,就像那样简单.鉴于你在编写递归下降语法之前需要那种构建块,并且鉴于旁边没有人可以管理那个简单的构建块,那么......
鉴于这种悲惨的状态,最好只使用正则表达式进行简单的编辑工作,并将其用于更真实的正则表达式向导的完整解决方案,因为它们是微妙且快速的愤怒.当然是正则表达式的意义,而不是(仅仅)向导.
但是可以肯定的是,保留一些罐装正则表达式来进行简单的编辑而不是完全解析.这样,每次从第一原则开始,你都不会被迫重新修改它们.我确实保留了其中的一些,但后来我还保留了简单的框架,允许我编辑HTML的特定结构元素,如纯文本或标记内容或链接引用等,并且这些都使用完整的解析器,然后让我完全放心地手术瞄准我想要的部分,我没有忘记一些东西.
更多的是作为可能的东西的证明,你可以看到更多,嗯,"英雄"模式匹配的一些答案,包括递归, 在这里, 这里, 这里, 这里, 这里和 这里.
记者了解到,其中一些为人们展示为什么他们应该的明确目的实际上是写不使用正则表达式,因为他们中的一些确实很复杂,很多moreso比你能指望nonwizards.这种困难可能会把你赶走,这很好,因为它有点意思.
但是,不要让它阻止您使用viHTML文件,也不要让您远离使用其搜索或替换命令.不要让完美成为善的敌人.有时候足够好就是你需要的东西,因为完美需要的投入比以往任何时候都要多.
了解哪种方法可以让您获得最大的收益,这需要花费一些时间来学习,没有人可以告诉您适合您的答案.他们不了解您的数据集,您的要求,您的技能组合,您的优先事项.因此,任何明确的答案都是自动错误的.你必须自己评估这些东西.
我认为 XPath 是遍历类 XML 文档的主要选项。使用 RegExp,您可以处理不同形式的标签编写方式(带多个空格、双引号、单引号、无引号、一行、多行、带内部数据、不带内部数据等) )。使用 XPath,这对您来说都是透明的,并且它具有许多功能(例如通过索引访问节点、通过属性值选择、选择模拟以及许多其他功能)。
请访问http://www.w3schools.com/xpath/了解它的强大功能。
编辑:另请参阅如果不使用正则表达式,HTML 解析如何工作?
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |