如何编写正则表达式来填充给定文件类型的列表&排除某些文件夹

时间:2016-09-13 22:57:13

标签: regex excel vba excel-vba

我已经做了很多关于此的搜索,但仍然不能完全把它们放在一起。

我正在尝试创建一个Excel VBA程序,该程序根据用户输入正则表达式填充电子表格,以便我可以使用其他vba程序处理这些文件。

例如,如果我想填充包含所有Autodesk Inventor文件类型的文件夹,我会使用:

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

从我所读到的,如果我想要一个正则表达式跳过文件夹中的文件或包含字符串,我会使用类似的东西:

(?iOldVersions)

但是就像我提到的那样,我无法将它们组合在一起以便它是一个单一的注册调用 - 而且,如果有多个字符串我希望它跳过(即;文件夹 OldVersions < / em>和 Legacy

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

我正在使用的代码与本文相同,但我添加了一个参数,通过从excel中的单元格中提取模式将模式传递给顶级代码。

List files of certain pattern using 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

1 个答案:

答案 0 :(得分:2)

要排除包含\OldVersions\\Legacy\的匹配字符串,只需在开头添加锚点和否定前瞻:

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

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (?!.*\\(?:OldVersions|Legacy)\\) - 如果\ + OldVersionsLegacy + \在除{{之外的0 +字符之后{0}},则表示匹配失败1}}和\r\n)。
  • .* - 除了.*\r之外的0 +字符,尽可能多,直到最后......
  • \n - 文字\.
  • . - 非捕获组中的替代方案之一
  • (?:iam|ipt|ipn|idw) - 字符串结束。