如何编写正则expression式来填充给定文件types的列表并排除某些文件夹

我在这方面做了很多search,但还是不能把它放在一起。

我想创build一个Excel VBA程序,填充电子表格基于用户input正则expression式,以便我可以处理与其他VBA程序的文件。

例如,如果我想用所有Autodesk Inventor文件types填充文件夹,我将使用:

.*\.(iam|ipt|ipn|idw) 

从我读过,如果我想要一个正则expression式来跳过文件夹中的文件或包含一个string,我会使用类似于:

 (?iOldVersions) 

但正如我所提到的,我有困难把它放在一起,以便它是一个单一的调用 – 而且,如果有多个string,我希望它跳过(即;文件夹OldVersionsLegacy

我想我想保持它作为正则expression式,虽然我猜我也可以使用wScript.Shell(或任何对象是),但现在只是熟悉正则expression式是很好的。

我正在使用的代码是相同的这篇文章,但我添加了一个参数,将模式传递到顶级代码从Excel中的单元格拉。

使用Excel VBA列出某些模式的文件

再次,任何帮助将不胜感激!

再次感谢所有!

编辑:最新的尝试….

 Private Sub FindPatternMatchedFiles() objFile = "C:\OldVersions\TestFile.iam" Dim objRegExp As Object Set objRegExp = CreateObject("VBScript.RegExp") 'objRegExp.Pattern = "(.*\.(iam|ipt|ipn|idw))(?!(\z))." objRegExp.Pattern = "(^((?!OldVersions).)*$)(.*\.(iam|ipt|ipn|idw))" objRegExp.IgnoreCase = True res = objRegExp.test(objFile) MsgBox (res) 'Garbage Collection Set objRegExp = Nothing End Sub 

要排除具有\OldVersions\\Legacy\匹配string,只需在开始处添加锚点和负向\OldVersions\

 ^(?!.*\\(?:OldVersions|Legacy)\\).*\.(?:iam|ipt|ipn|idw)$ 

查看正则expression式演示

详情

  • ^ – string的开始
  • (?!.*\\(?:OldVersions|Legacy)\\) – 如果在\r\n.* )以外的0+字符之后有\ OldVersionsLegacy + \ , 。
  • .* – 除\r\n之外的其他字符,尽可能多,直到最后…
  • \. – 文字
  • (?:iam|ipt|ipn|idw) – 非捕获组中的替代scheme之一
  • $ – string的结尾。