2013-03-19 20 views
0

我有一個文本文件,其中每行包含一個記錄的字段。每行有一個從V010開始以V999結尾的字段標識符。多行正則表達式模式,其中開始和結束已知

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

如何開始設置多線正則表達式。我試圖理解正則表達式的力量,但這次多線模式是一個困難。

我的想法是這樣的:

^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 
+0

V999必須細分電子郵件廣告和作爲標記只有一個發生,例如(V999){1}。也可以將模式標記爲多行搜索(其中,匹配行的末尾)。這一切都取決於應用程序真正使用的風格,所以只需閱讀幫助文件並查找「標誌」,「組?(ing)?」在它和這樣的;) – catalesia 2013-03-19 16:14:07

回答

1

這應該滿足您的需求:

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

  • (.|\n|\r|\r\n)意味着「(包括新行)的任何字符」
  • (?!V999)表示「後面沒有V999
  • *?裝置「匹配儘可能短」(而*裝置「匹配儘可能長」
+0

你能解釋在這些情況下發生了什麼? '\ *?'是什麼意思?準確地做?第二種解決方案是爲我工作,但現在當我嘗試在兩者之間添加V056時,我遇到了同樣的問題。如果一個或多個記錄不包含V056字段選擇多個記錄(我的正則表達式:V010(。| \ n | \ r | \ r \ n)*?V056(。| \ n | \ r | \ r \ n)*?V999) – 2013-03-19 18:29:36

+0

@LuukKrijnen對不起,我忘了這條規定。我編輯了我的答案。 – sp00m 2013-03-19 19:42:33

+0

對不起,您的答案並不完整。在檢查你的演示時,我將v056移到了第二個記錄。正如你所看到的那樣。 – 2013-03-19 19:51:05

相關問題