我已经做了很多关于此的搜索,但仍然不能完全把它们放在一起。
我正在尝试创建一个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
答案 0 :(得分:2)
要排除包含\OldVersions\
或\Legacy\
的匹配字符串,只需在开头添加锚点和否定前瞻:
^(?!.*\\(?:OldVersions|Legacy)\\).*\.(?:iam|ipt|ipn|idw)$
请参阅regex demo
<强>详情:
^
- 字符串开头(?!.*\\(?:OldVersions|Legacy)\\)
- 如果\
+ OldVersions
或Legacy
+ \
在除{{之外的0 +字符之后{0}},则表示匹配失败1}}和\r
(\n
)。.*
- 除了.*
和\r
之外的0 +字符,尽可能多,直到最后...... \n
- 文字\.
.
- 非捕获组中的替代方案之一(?:iam|ipt|ipn|idw)
- 字符串结束。