解析html文档中的脚注

时间:2011-06-27 05:05:36

标签: html regex

我需要解析通过将word文档保存为html而生成的html文档。

我一直非常成功地使用HTML敏捷包,但在这个例子中,我认为使用正则表达式这一部分可能更容易(意见?)

Word在将其中一个脚注转换为html

时会生成以下代码
<a href="#_ftn2" name="_ftnref2" title=""><span
class=MsoFootnoteReference><span class=MsoFootnoteReference><span
style='font-size:10.0pt'>[2]</span></span></span></a>

此输出对于每个脚注都是一致的,只有href =和名称更改以及[2]文本。

我需要提取_ftn2和[2]元素。

到目前为止,我有以下正则表达式,它将_ftn2部分提取到名称组

<a href="#(?<name>_ftn\d).*>(<span class=MsoFootNoteReference>)

我在使用所有这些span标记解析第二位时遇到了一些麻烦。

为此使用正则表达式会更容易吗?还是我应该继续在此部分使用HAP?

有人知道为什么word会生成嵌套的相同span标记

<span class=MsoFootnoteReference>

1 个答案:

答案 0 :(得分:1)

如果输入完全遵循那种格式,那么你可以使用非常宽松的正则表达式。您只需要忽略除要提取的部分之外的所有内容,然后使用非贪婪的表达式来消耗它们之间的所有垃圾:

<a href="#(?<name>_ftn\d).*?(?<number>\[\d+\]).*?<\/a>

您可以使用非贪婪的.*?来消耗所有额外标记,因为其中的任何内容都不会与您的下一个\[\d+\]模式匹配。你最后并不需要.*?<\/a>位,这主要是为了对称性和一些额外的偏执狂。

这样的事情可能是少数使用正则表达式拆分HTML的情况之一。您可以使用HTML解析器执行此类操作,但随后您将成为扭曲的XPath表达式(所有这些看起来都相似),DOM操作或SAX事件的噩梦。而且你甚至可能会被一场骚扰吃掉。