Die*_*oDD 15 regex notepad++ negative-lookbehind regex-lookarounds
我有数以百计的字符串的出现的源文件flecha.jpg
和flecha1.jpg
,但我需要找到其他的事件.jpg
图像(即casa.jpg
,moto.jpg
,等等)
我试过使用带有负向lookbehind的正则表达式,如下所示:
(?<!flecha|flecha1).jpg
Run Code Online (Sandbox Code Playgroud)
但它不起作用!Notepad ++只是说它是一个无效的正则表达式.
我在其他地方尝试了正则表达式并且它有效,这是一个例子,所以我猜这是NPP处理正则表达式或者lookbehinds/lookaheads语法的问题.
那么我如何才能在NPP中获得相同的正则表达式结果呢?
如果有用,我使用Notepad ++版本6.3 Unicode
另外,如果你很善良,那么实现同样的东西的语法是什么,但可选的数字(在这种情况下只有'1')作为我的字符串的后缀?(即使它在NPP中不起作用,只是为了知道)......
我试过(?<!flecha[1]?).jpg
但它不起作用.它应该与其他正则表达式相同,请参见此处(RegExr)
acd*_*ior 16
Notepad ++似乎没有实现可变长度的后视(这在某些工具中会发生).解决方法是使用多个固定长度的后视:
(?<!flecha)(?<!flecha1)\.jpg
Run Code Online (Sandbox Code Playgroud)
你可以检查一下,比赛是一样的.但这适用于npp.
注意我逃脱了.
,因为你试图匹配扩展,你想要的是文字.
.你的方式,它是一个通配符 - 可能是任何角色.
关于额外的问题,不幸的是,由于我们不能有可变长度的后视镜,因此不可能有可选的后缀(数字)而不需要多个后视镜.
这里给出了几种在Notepad ++(或具有相同限制的正则表达式引擎)中解决此限制的策略。
Notepad ++不支持使用可变长度否定式后向断言,最好有一些解决方法。让我们考虑在原来的问题的例子,但假设我们要避免命名文件的出现flecha
与任何数量的后位flecha
,并与之前的任何字符flecha
。在这种情况下,使用可变长度负向后方的正则表达式看起来像(?<!flecha[0-9]*)\.jpg
。
flecha.jpg
flecha1.jpg
flecha00501275696.jpg
aflecha.jpg
img_flecha9.jpg
abcflecha556677.jpg
首先,在您要避免使用的实例上执行查找和替换-在本例中是的实例flecha[0-9]*\.jpg
。插入特殊的标记以形成在其他任何地方都不会出现的图案。对于此示例,我们将.
在之前插入一个额外的字符.jpg
,前提是该..jpg
字符未在其他位置出现。因此,我们这样做:
找: (flecha[0-9]*)(\.jpg)
用。。。来代替: $1.$2
现在,您可以.jpg
使用简单的正则表达式(例如\w+\.jpg
或)在文档中搜索所有其他文件名,(?<!\.)\.jpg
然后对它们进行处理。当你完成后,做最后的查找和替换操作,你替换的所有实例..jpg
有.jpg
,删除临时标记。
否定的超前断言可用于确保您不匹配不需要的文件名:
(?<!\S)(?!\S*flecha\d*\.jpg)\S+\.jpg
分解:
(?<!\S)
通过断言匹配前面没有非空格字符,确保匹配从文件名的开头而不是中间开始。(?!\S*flecha\d*\.jpg)
确保匹配的任何内容都不包含我们要避免的模式\S+\.jpg
实际上是匹配的内容-一串非空格字符,后跟.jpg
。对于您不希望匹配的模式具有少量可能的长度的情况,这是一种快速(但不太优雅)的解决方案。
例如,如果我们知道flecha
后面最多跟三位数,那么我们的正则表达式可能是:
(?<!flecha)(?<!flecha[0-9])(?<!flecha[0-9][0-9])(?<!flecha[0-9][0-9][0-9])\.jpg
归档时间: |
|
查看次数: |
9141 次 |
最近记录: |