RegEx以字符串的最后一次出现开始
我有一个文本文件,其中有一个数据集,我想从中删除一些记录。看起来是这样的:RegEx以字符串的最后一次出现开始,regex,notepad++,Regex,Notepad++,我有一个文本文件,其中有一个数据集,我想从中删除一些记录。看起来是这样的: =分隔符= 数据 unwantedKeyword 数据 =分隔符= 数据 wantedKeyword 数据 =分隔符= 数据 unwantedKeyword 数据 =分隔符= 数据 wantedKeyword 数据 =分隔符= 我可以使用某个关键字来标识我不想要(或想要)的记录。我想使用正则表达式,利用这个关键字和分隔符字符串删除所有这些表达式。 删除记录的“底部”部分效果很好,但当我尝试使用以下方法删除“顶部”位时:
还是让它反向读取文件?Notepad++为RegEx-tho禁用了该选项,因此不确定是否可行。如果要删除第1行到第3行和第9行到第11行,可以使用前瞻来防止匹配所有以
=separator=
开头或包含unwantedKeyword的行
^=separator=.*(?:\R(?!(?:=separator=|.*?\bunwantedKeyword\b)).*)*\R.*?\bunwantedKeyword\b.*\R*
我会用
(?s)=separator=(?:(?!=separator=).)*?unwantedKeyword
看
解释
--------------------------------------------------------------------------------
(?s) set flags for this block (with . matching \n)
--------------------------------------------------------------------------------
=separator= '=separator='
--------------------------------------------------------------------------------
(?: group, but do not capture (0 or more times
(matching the least amount possible)):
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
=separator= '=separator='
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
. any character
--------------------------------------------------------------------------------
)*? end of grouping
--------------------------------------------------------------------------------
unwantedKeyword 'unwantedKeyword'
为什么分隔符是第一位,不需要的关键字是第二位,反之亦然?这只是去掉了记录的“底部”部分,所以在本例中,第3到5行和第11到13行保持第2行和第10行不变。这很好,是我需要做的第二部分,但不是全部。我想删除像1到3和9到11。主要问题是从5到11行被删除。@M.Bugajski啊,我打错了。它确实删除了第1至3行和第9至11行