如何编写正则expression式来填充给定文件types的列表并排除某些文件夹
我在这方面做了很多search,但还是不能把它放在一起。
我想创build一个Excel VBA程序,填充电子表格基于用户input正则expression式,以便我可以处理与其他VBA程序的文件。
例如,如果我想用所有Autodesk Inventor文件types填充文件夹,我将使用:
.*\.(iam|ipt|ipn|idw)
从我读过,如果我想要一个正则expression式来跳过文件夹中的文件或包含一个string,我会使用类似于:
(?iOldVersions)
但正如我所提到的,我有困难把它放在一起,以便它是一个单一的调用 – 而且,如果有多个string,我希望它跳过(即;文件夹OldVersions和Legacy )
我想我想保持它作为正则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+字符之后有\
OldVersions
或Legacy
+\
, 。 -
.*
– 除\r
和\n
之外的其他字符,尽可能多,直到最后… -
\.
– 文字 -
(?:iam|ipt|ipn|idw)
– 非捕获组中的替代scheme之一 -
$
– string的结尾。
- 在Excel中分割大写单词
- 从匹配的正则expression式(VBA)中提取Excelstring
- Excel – string删除重复
- macros跳过A列并去掉小写字母
- 如果相邻单词以相同的字母开头,则用“/”replace空格,否则用“&”ExcelmacrosVBAreplace
- 使用正则expression式将excel公式转换成wolfram mathematica
- 想要replace工作簿中的某些单元格。 Excel是否支持search和replace中的正则expression式?
- 通过search提高excel RegExp用户function,并按列表进行replace
- 正则expression式从CSV中删除加倍的双引号