RegEx:匹配字符串,但仅限于特定的最小长度

时间:2016-08-23 20:49:40

标签: regex

我有大量的文本文档,并尝试从每个文档中提取特定的部分。它始终以行的开头的“Item 7”开头,并始终以另一行的开头的“Item 8”结束。我可以使用正则表达式

找到这一部分
(^( *)Item 7(.+?)^( *)Item 8)

我的两个问题是:

  1. 在我的每篇文档中,可能有两个部分符合此描述。我想确保我只匹配第二个,这也要长得多。

  2. 如何使用notepad ++在“搜索和替换”查询中使用正则表达式提取此部分?

  3. 我不确定我是否使用了正确的工具。

    谢谢!

    补充: 到目前为止,在答案的帮助下,我在记事本++中做了以下操作。 搜索

    。*(^(*)Item * 7(?! A)(?!。 ^ Item * 7(?!* A))(。+?)^(*)( ?= ^ Item 8))。

    Raplce with

    $ 1

    到目前为止,感谢您的帮助。它有一个例外,效果很好。我担心我需要详细介绍:大多数(但不是全部)我想从中提取文本的文档都有一个内容表。这就是为什么我想提取“第7项至第8项”的第二种情况,以防有两种情况。还有一个项目7A,如果你想知道我的代码。

    正如我现在所知,有很多文件,在第7项至第8项的第二种情况下,每个页面都有“第7项”作为标题。因此,我的代码只匹配第7项的最后一页在某些情况下。

    我认为解决方案可能只是忽略第7项到第8项的情况,如果它们具有一定的最小长度。具体而言,只有在第7项至第8项的情况下,如果它们的符号少于120,则忽略它们。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我会建议:

^Item 7(?!.*^Item 7).*^Item 8

这会在文档中找到[Item 7 - Item 8]对中的最后一对。

使用Find函数在Notepad ++ 6.9.2中工作,使用正则表达式选项 并选中. matches newline

注意:Find all in Current Document按钮似乎使用了对正则表达式的不同解释,显然忽略了负向前瞻。此解决方案仅适用于Find Next按钮。