多线正则表达式模式,其中已知开始和结束

时间:2013-03-19 16:04:25

标签: regex

我有一个文本文件,其中每行包含一个记录字段。每行都有一个字段标识符,以V010开头,以V999结尾。

我想搜索包含V056字段的所有记录(此时我正在使用插件http://www.phdesign.com.au/programming/toolbucket-multi-line-search-plugin-for-notepad/使用Notepad ++)。

如何开始设置多行Regex。我试图了解正则表达式的力量,但这次多线模式是一个难点。

我在想这样的事情:

^V010.+

点是除新行之外的任何字符,因此添加'\ r \ n'将带我到:

^V010.+\r\n

接下来我想选择一个完整的记录,所以如果V999是下一行,那么添加V999 $应该这样做,除了中间有一个未知数量的行,所以在de'。+ \ r \ n'周围添加括号应该这样做特技。

^V010(.+\r\n)+V999$

除了现在选择第一个V010到最后一个V999。如何选择1个单一记录。从那里我可以进一步搜索单个记录是否包含V056字段。

文件示例:

A001
A999
V010 V
V020 XXXXXXXXXXX
V021 XXXXXXXXXXX
V040 XXXXX
....
V200 NL
V999
V010 V
V020 XXXXXXXXXXX
....
V999
Z001
Z999

1 个答案:

答案 0 :(得分:1)

这个应该符合您的需求:

V010((.|\n|\r|\r\n)(?!V999))*?V056(.|\n|\r|\r\n)*?V999demo

  • (.|\n|\r|\r\n)表示“任何字符(包括新行)
  • (?!V999)表示“未跟V999
  • *?表示“匹配尽可能短”(而*表示“尽可能匹配”