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