选择除一个分机之外的所有文件

时间:2012-10-24 01:17:58

标签: c# regex

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

.*  

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

5 个答案:

答案 0 :(得分:2)

或者,最简单:

(?i)\.abc$

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

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

答案 1 :(得分:1)

否定预测后瞻(假设您所指的支持它):

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

对不起,你想要后卫,而不是提前。

答案 2 :(得分:0)

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

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

或者更简单地使用一个负向的前瞻锚定来开始输入:

^(?!.*\.abc$)

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

试试这个简单的regex

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

解释

  

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

     

(?= subexpression) 的   零宽度正向先行断言。

     

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

     

$ 的   匹配必须发生在字符串的末尾,或者在行或字符串末尾的\ n之前。