使用VBA,我正在尝试使用正则表达式从没有扩展名的UNC路径捕获文件名 - 仅查看.TIF文件。
到目前为止,这就是我所拥有的:
Function findTIFname(filestr As String) As String
Dim re As RegExp
Dim output As String
Dim matches As MatchCollection
Set re = New RegExp
re.pattern = "[^\\]+(?:[.]tif)$"
Set matches = re.Execute(filestr)
If matches.Count > 0 Then
output = matches(0).Value
Else
output = ""
End If
findTIFname = output
End Function
但是当我运行如下函数时:
msgbox findTIFname("\\abc\def\ghi\jkl\41e07.tif")
我得到以下输出:
41e07.tif
我认为“(?:xxx)”是非捕获组的正则表达式语法;我做错了什么?
答案 0 :(得分:4)
语法(?:...)
是非捕获组。你需要的是一个正向前瞻断言,它有(?=...)
语法,如下所示:
re.pattern = "[^\\]+(?=[.]tif$)"
请注意,环视断言的零宽度并且不使用任何字符。
答案 1 :(得分:3)
您是否真的需要使用 RegEx 执行此操作? 访问(或更好的是,MS Office)具有内置的方法,可以在没有RegEx的情况下轻松完成此任务。
您只需要引用Microsoft Scripting Runtime(据我所知,应该包含在每个MS Office安装中)。
然后,您可以使用FileSystemObject
:
Public Function findTIFname(filestr As String) As String
Dim fso As FileSystemObject
Set fso = New FileSystemObject
If fso.GetExtensionName(filestr) = "tif" Then
findTIFname = fso.GetBaseName(filestr)
End If
Set fso = Nothing
End Function
根据您的示例UNC路径\\abc\def\ghi\jkl\41e07.tif
,这将返回41e07
。