我有大量的文本文档,并尝试从每个文档中提取特定部分。它总是以一行开头的“Item 7”开头,并且总是以另一行开头的“Item 8”结尾。我可以用正则表达式找到这部分:正则表达式:匹配字符串,但仅限于某些最小长度
(^(*)Item 7(.+?)^(*)Item 8)
我的两个问题是:
有可能两个部分,在我的每个文件符合这一描述。我想确保我只匹配第二个,这也相当长。
如何在使用记事本++的“搜索和替换”查询中使用正则表达式提取此部分?
我不确定我是否使用了正确的工具。
谢谢!
增补: 在迄今为止的答案帮助下,我在记事本++中做了以下工作。 搜索
。*(^(*)项目* 7(?A)(?!^*项目7(?* A))(。+?)^(*)(? =^Item 8))。
Raplce与
$ 1
感谢您的帮助迄今。它的工作很好,只有一个优点。恐怕我不得不进入更多细节:我想从中提取文本的大多数(但不是全部)文档都有一张内容表。这就是为什么我想提取第二个“第7项到第8项”的情况,以防有两个。还有一个项目7A,以防万一你想知道我的代码。
正如我现在认识到的那样,在第7项到第8项的第二种情况下,有许多文档的每个页面上都有“项目7”作为标题。因此,我的代码只匹配项目的最后一页7在某些情况下。
我认为一个解决方案可能只是忽略项目7到项目8的情况,如果他们有一定的最小长度。具体而言,只要忽略项目7至项目8的情况,如果它们少于120个标志。
任何想法?
尝试'(?m)^第7项([\ S \ s] *?)(?= ^第8项)'但是,您应该举例说明。 – sln
如果有2个块,但没有ToC,会怎么样?那么,你怎么知道要抓什么?对不起,现在,这个问题没有解决方案,直到你制定上下文规则。 –