2013-11-20 57 views
0

其他論壇成員 我正在使用NotePad ++版本6.1.2,我需要知道是否可以使通用表達式執行查找&替換操作完成以下操作:RegEx查找和替換Y文本和Z文本之間的X文本

它找到位於「Y」和「Z」文本之間的「X」文本並將其替換爲無效,以便有效刪除「X」文本以及「Y」和「Z 「文字以及。因此,對於下面顯示的句子,通用表達式需要刪除單詞「開始」和「結束」之間的所有文本,還需要刪除單詞「開始」和「結束」以及刪除換行。

開始「X」文本量結束

我應該指出的是,「開始」和「結束」在整個文本文件洽。因此,我需要通用表達式來查找「開始」和「結束」的每個實例,然後刪除它們以及任何文本。任何幫助將不勝感激。謝謝。

回答

2

按Ctrl + H查找和替換對話框。在底部的「搜索模式」中選擇「正則表達式」。選中「。matches newline」框。

在 「查找內容」 粘貼以下:

Begin.*?End 

在 「替換爲」 留空。

按「全部替換」。

2

所以要刪除Y,X,Z,當且僅當X,Y和Z之間:

一個例子:

Y = "BEGIN" 
Z = "END" 
X = "CHOUCROUTE" 

模式:

search : BEGIN(?>[^CE]+|C(?!HOUCROUTE)|E(?!ND))*CHOUCROUTE[\s\S]*?END 
replace: nothing 

這部分需要匹配除關鍵字或結束詞以外的所有內容,請詳細查看:

(?>     # open an atomic group 
    [^CE]+   # all except the letters C and E 
    |     # OR 
    C(?!HOUCROUTE) # C not followed by the end of the keyword 
    |     # OR 
    E(?!ND)   # E not followed by the end of the closing word 
)*     # repeat the group zero or more times 

原子團的目標是避免災難性的回溯。原子組禁止正則表達式引擎回溯。如果我使用了非捕獲組,而如果正則表達式引擎沒有找到關鍵字,它會嘗試所有可能的分割。

如果您使用記事本+ +不具有原子團的特徵的舊版本,你可以升級你的版本或使用這一招效仿(在先行的內容是默認原子):

((?=([^CE]+|C(?!HOUCROUTE)|E(?!ND)))\1)* 
+0

+1,但你可以添加一個解釋。 – Toto

+0

@ M42:改進了模式,並添加了解釋,謝謝。 –