[英]How to use regex substitution with non-capturing group in python3?
[英]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.