2

我想通过目录中的文件扩展名删除文件。现在,我的程序只需使用过滤器“点星号”选择所有文件类型,如下所示:

.*  

我现在需要它来删除所有文件,但文件扩展名为.abc的文件除外。我将如何更改正则表达式过滤器以反映这一点?

4

5 回答 5

2

或者,最简单的:

(?i)\.abc$

甚至不需要花哨的正则表达式引擎(具有环视支持)来匹配那个引擎。只需否定代码中的匹配即可。如果匹配,请不要删除它。如果没有,请删除它。

(?i)部分是可选的。它使正则表达式不区分大小写(因此它将匹配file1.abcFILE2.ABC)。您可以使用Regex options实现相同的效果。

于 2012-10-24T01:29:43.883 回答
1

负前瞻后视(假设您所指的

^.*(?<!\.abc)$

抱歉,您要向后看,而不是向前看。

于 2012-10-24T01:20:01.203 回答
0

只是我们也有一个“真实”正则表达式的回复:

(^.?.?.?|[^.]...|\.[^a]..|\..[^b].|\...[^c])$

但是您可以看到这变得非常复杂,尤其是当您需要第二个扩展时,因此您实际上真的想使用其他一些解决方案:-)

于 2012-10-24T01:48:19.623 回答
0

试试这个简单的regex

^.*(?=[.]abc$)

解释:

^ 匹配必须从字符串或行的开头开始。

(?= subexpression) 零宽度正向超前断言。

[ character_group ] 匹配 character_group 中的任何单个字符。

$ 匹配必须出现在字符串\的末尾或行或字符串末尾的 n 之前。

于 2012-10-24T07:19:04.630 回答
0

您可以在后面使用否定的外观,锚定到输入的末尾,如下所示:

^.*(?<!\.abc)$

或者更简单地使用锚定到输入开始的否定前瞻:

^(?!.*\.abc$)
于 2012-10-24T01:24:51.700 回答