繁体   English   中英

如何在VBA正则表达式中使用非捕获组?

[英]How to use non-capturing group in VBA regex?

对于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)”是一个非捕获组的正则表达式语法; 我究竟做错了什么?

语法(?:...)是一个非捕获组 这里需要的是一个正向超前断言 ,它具有(?=...)语法,如下所示:

re.pattern = "[^\\\\]+(?=[.]tif$)"

请注意,环视断言的宽度为零 ,不占用任何字符。

您真的需要使用RegEx这样做吗?
Access(或更好的MS Office)具有内置的方法,无需RegEx即可轻松完成此操作。

您只需要引用Microsoft脚本运行时(据我所知,应将其包含在每个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM