正则表达式匹配多行上的所有文本,除非它包含特定的字符串?

时间:2015-06-22 02:35:35

标签: regex

我之前已经问过这个问题,但之前的回复都没有对我有用。我有一张PDF,我试图用Calibre转换。在转换过程中,我想摆脱页​​眉和页脚,看起来像这样:

<hr/>
<a name=9></a>viii<br>
<i>Introduction</i><br>

<hr/>
<a name=10></a><i>Introduction</i><br>
ix<br>

我使用了以下正则表达式,它可以很好地选择所有这些实例:

(?s)<hr/>(.*?)</a>(.*?)<br>(.*?)<br>

但是,当有章节标题时,PDF代码会这样说:

<hr/>
<a name=8></a><a href="index.html#6">INTRODUCTION</a><br>

这也是我的正则表达式。我想改变我的代码以忽略章节标题。我已经尝试了几十种替换

的组合
(.*?) 

之类的东西
[^index] 
^((?!index).)*$ 
/(?s)^((?!index).)*$/ 

我也尝试过使用href,=和&#34;而不是&#34;索引,&#34;但这些代码都没有选择任何内容。我需要在代码中更改所有内容,以便在不删除章节标题的情况下删除页眉和页脚?提前谢谢!

1 个答案:

答案 0 :(得分:1)

这并不是那么难。假设您的HTML总是很简单,并且不包含引号中的<>等棘手内容,请添加以下内容:

(?:<a[^>]+href=[^>]+>.*?</a>)?

在当前正则表达式中的</a>之后立即执行。该位表示标题可能存在,也可能不存在,无论哪种方式,都不要将其取出(非捕获组(?:)。)