使用 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
Run Code Online (Sandbox Code Playgroud)
但是当我按如下方式运行函数时:
msgbox findTIFname("\\abc\def\ghi\jkl\41e07.tif")
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
41e07.tif
Run Code Online (Sandbox Code Playgroud)
我认为“(?:xxx)”是非捕获组的正则表达式语法;我究竟做错了什么?
语法(?:...)是一个非捕获组。这里你需要的是一个积极的前瞻断言,它的(?=...)语法如下:
re.pattern = "[^\\]+(?=[.]tif$)"
请注意,环视断言的宽度为零且不消耗任何字符。
您真的需要使用RegEx来做到这一点吗?
Access(或者更好的是 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
Run Code Online (Sandbox Code Playgroud)
鉴于您的示例 UNC 路径\\abc\def\ghi\jkl\41e07.tif,这将返回41e07。