我想通过目录中的文件扩展名删除文件。现在,我的程序只需使用过滤器“点星号”选择所有文件类型,如下所示:
.*
我现在需要它来删除所有文件,但文件扩展名为.abc的文件除外。我将如何更改正则表达式过滤器以反映这一点?
或者,最简单的:
(?i)\.abc$
甚至不需要花哨的正则表达式引擎(具有环视支持)来匹配那个引擎。只需否定代码中的匹配即可。如果匹配,请不要删除它。如果没有,请删除它。
该(?i)
部分是可选的。它使正则表达式不区分大小写(因此它将匹配file1.abc和FILE2.ABC)。您可以使用Regex options实现相同的效果。
只是我们也有一个“真实”正则表达式的回复:
(^.?.?.?|[^.]...|\.[^a]..|\..[^b].|\...[^c])$
但是您可以看到这变得非常复杂,尤其是当您需要第二个扩展时,因此您实际上真的想使用其他一些解决方案:-)
试试这个简单的regex
:
^.*(?=[.]abc$)
解释:
^
匹配必须从字符串或行的开头开始。
(?= subexpression)
零宽度正向超前断言。
[ character_group ]
匹配 character_group 中的任何单个字符。
$
匹配必须出现在字符串\
的末尾或行或字符串末尾的 n 之前。
您可以在后面使用否定的外观,锚定到输入的末尾,如下所示:
^.*(?<!\.abc)$
或者更简单地使用锚定到输入开始的否定前瞻:
^(?!.*\.abc$)