我需要解析通过将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>
答案 0 :(得分:1)
如果输入完全遵循那种格式,那么你可以使用非常宽松的正则表达式。您只需要忽略除要提取的部分之外的所有内容,然后使用非贪婪的表达式来消耗它们之间的所有垃圾:
<a href="#(?<name>_ftn\d).*?(?<number>\[\d+\]).*?<\/a>
您可以使用非贪婪的.*?
来消耗所有额外标记,因为其中的任何内容都不会与您的下一个\[\d+\]
模式匹配。你最后并不需要.*?<\/a>
位,这主要是为了对称性和一些额外的偏执狂。
这样的事情可能是少数使用正则表达式拆分HTML的情况之一。您可以使用HTML解析器执行此类操作,但随后您将成为扭曲的XPath表达式(所有这些看起来都相似),DOM操作或SAX事件的噩梦。而且你甚至可能会被一场骚扰吃掉。