RegEx to Find&在Y文本和Z文本之间替换X文本

时间:2013-11-20 22:56:35

标签: regex replace notepad++

论坛成员, 我正在使用NotePad ++版本6.1.2,我需要知道是否可以使一般表达式执行Find&替换完成以下操作:

它找到位于“Y”和“Z”文本之间的“X”文本,并将其替换为无效,以便有效地删除“X”文本以及“Y”和“Z”文本。因此,对于下面显示的句子,一般表达式需要删除单词“Begin”和“End”之间的所有文本以及单词“Begin”和“End”以及删除everthing。

开始“X”量的文字结束

我应该指出“Begin”和“End”在整个文本文件中是一致的。因此,我需要一般表达式来查找“Begin”和“End”的每个实例,然后删除它们以及它们之间的任何文本。任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

按Ctrl + H查找和替换对话框。在底部的“搜索模式”中选择“正则表达式”。选中“。匹配换行符”框。

在“查找内容”中粘贴以下内容:

Begin.*?End

在“替换为”中留空。

按“全部替换”。

答案 1 :(得分:2)

当且仅当X在Y和Z之间时,你想要删除Y,X,Z:

一个例子:

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

模式:

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

除了关键字或结束词之外,还需要此部分(?>[^CE]+|C(?!HOUCROUTE)|E(?!ND))*来匹配所有内容,让我们详细了解一下:

(?>                 # 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

原子团的目标是避免灾难性的回溯。原子组禁止正则表达式引擎回溯。如果我使用了非捕获组而且正则表达式引擎没有找到关键字,那么它会尝试所有可能的划分。

如果您使用的旧版本的notepad ++没有原子组功能,您可以使用此技巧升级您的版本或模拟它(默认情况下,前瞻的内容是原子的):

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