正则表达式与不匹配
我想创建一个正则表达式来验证文件名以进一步处理。正则表达式与不匹配
我想,以配合扩展.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$)
它失败。
我认为,创建两个过滤器(如您在上面评论建议)可能是最好的一段路要走,但如果你喜欢做在一个单一的正则表达式,那么你应该能够编写:
objRegEx.Pattern = "^(?!.*(_out\.csv|mylog\.log)$).*\.(txt|csv|log)$"
这确保了文件不开始与.*(_out\.csv|mylog\.log)$
(即,它不端与_out.csv
或mylog.log
)。
这是按编码方式工作的,但它要求输出文件和日志文件必须是硬编码的。我试图通过在VBS的开头添加简单的初始用户声明来避免这种情况。除非有某种方法不要求“。”。被散列,除了另一个RegEx.Replace ....但是再一次,存在扩展少的“mylog_log”文件的可能性是什么。 – 2012-03-22 12:58:35
我不知道是否vbscript的支持负回顾后,但如果这样做,有一个尝试:
(?<!_out|mylog)\.(?:txt|csv|log)$
可能的VBScript接受负回顾后发而不是可变长度回顾后,在这种情况下,使用:
(?<!_out)(?<!mylog)\.(?:txt|csv|log)$
正则表达式中的语法错误 – 2012-03-21 14:58:45
@PaulYoung:可能是vbscript不接受可变长度lookbehind。看我的编辑。 – Toto 2012-03-21 15:07:03
不会,都会在字符中产生“正则表达式中的语法错误”:3 – 2012-03-21 15:17:38
我开始怀疑我是否应该只创建两个表达式,如果它匹配第一个过滤器,则拒绝它是否与第二个表达式匹配。 – 2012-03-21 15:10:28