论坛成员, 我正在使用NotePad ++版本6.1.2,我需要知道是否可以使一般表达式执行Find&替换完成以下操作:
它找到位于“Y”和“Z”文本之间的“X”文本,并将其替换为无效,以便有效地删除“X”文本以及“Y”和“Z”文本。因此,对于下面显示的句子,一般表达式需要删除单词“Begin”和“End”之间的所有文本以及单词“Begin”和“End”以及删除everthing。
开始“X”量的文字结束
我应该指出“Begin”和“End”在整个文本文件中是一致的。因此,我需要一般表达式来查找“Begin”和“End”的每个实例,然后删除它们以及它们之间的任何文本。任何帮助将不胜感激。感谢。
答案 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)*