我正在尝试创建一个正则表达式来验证文件名以便进一步处理。
我想匹配扩展名为.txt
,.csv
或.log
的文件
但如果它与_out.csv
或mylog.log
这是我的开始:
Function CanProcessFile(strFileNameIn, strLogName, strOutName)
Dim objRegEx, colMatches, strPattern
Set objRegEx = CreateObject("VBScript.RegExp")
strPattern = "((.txt$)|(.csv$)|(.Log$))"
strPattern = "(?!(" & strLogName & "$))" & strPattern
'strPattern = "(?!(" & strOutName & "$))" & strPattern
objRegEx.Pattern = strPattern
objRegEx.IgnoreCase = True
Set colMatches = objRegEx.Execute(strFileNameIn)
If colMatches.Count > 0 Then
CanProcessFile = True
Else
CanProcessFile = False
End If
End Function
但每次我尝试添加^
或?!
(_out.csv$)
时都会失败。
答案 0 :(得分:2)
我认为创建两个过滤器(正如您在上面的评论中所建议的)可能是最好的方法,但如果您更喜欢在单个正则表达式中进行,那么您应该能够写:
objRegEx.Pattern = "^(?!.*(_out\.csv|mylog\.log)$).*\.(txt|csv|log)$"
确保文件不会启动 .*(_out\.csv|mylog\.log)$
(即,它不会结束 _out.csv
或{{ 1}})。
答案 1 :(得分:0)
我不知道vbscript是否支持负面的lookbehind,但如果确实如此,请尝试使用:
(?<!_out|mylog)\.(?:txt|csv|log)$
可能是vbscript接受负面的lookbehind而不是变长的lookbehind,在这种情况下,使用:
(?<!_out)(?<!mylog)\.(?:txt|csv|log)$