正则表达式与NOT匹配

时间:2012-03-21 14:42:07

标签: regex vbscript

我正在尝试创建一个正则表达式来验证文件名以便进一步处理。

我想匹配扩展名为.txt.csv.log的文件  但如果它与_out.csvmylog.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$)时都会失败。

2 个答案:

答案 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)$