2012-05-17 159 views
0

我有一个较小的SSIS packat,我试图用VB正则表达式匹配一个文件名并删除“said”文件。我的正则表达式看起来像这样,^RegZStmntAdj.[A-z0-9_].\.txt$,我想知道为什么它不会匹配目录中的任何文件。如果我正确思考,这是有效的语法。正则表达式匹配文件名

RegZStmntAdj2_07272011.txt 
RegZStmntAdj1_07272011.txt 
RegZStmntAdj2_07272011.txxt 
New Text Document.txt 

如果我^RegZStmntAdj.*.\.txt$运行正则表达式,它匹配了正确的文件并删除它们。我知道*的作品,但我想学习更精确的正则表达式。

RegZStmntAdj2_07272011.txt 
RegZStmntAdj1_07272011.txt 

回答

1

尝试以下正则表达式:

^RegZStmntAdj.[\w_]{9}\.txt$ 

我用\w,这是一样的A-Za-z0-9,并告诉它来搭配9个字符,这样它会符合您的文件名的_<date>部分。你只匹配那里的第一个字符(即下划线)。

使用PowerShell来验证:

PS> $test = "^RegZStmntAdj.[\w_]{9}\.txt$" 
PS> "RegZStmntAdj2_07272011.txt" -match $test 
    True 
PS> "RegZStmntAdj1_07272011.txt" -match $test 
    True 
PS> "RegZStmntAdj2_07272011.txxt" -match $test 
    False # (Correct as contains 2 "xx"s in extension) 
PS> "New Text Document.txt" -match $test 
    False # (Correct as nowhere near a match!!) 

为了使您的正则表达式更精确,你可以使用^RegZStmntAdj\d_[\d]{8}\.txt$,转化为:

的字符串开始以 “RegZStmntAdj”,然后一个数字,然后一个 下划线,然后8位数,然后结尾在“.txt”

我相信这是你正在找。

2

"^RegZStmntAdj.[A-z0-9_].\.txt$"匹配

  • 在BOS字面RegZStmntAdj
  • 一个字符(除了\ n)的所述AZ,0-9的
  • 一个字符和_设置
  • 一个字符(除\ n)
  • a dot
  • 在EOS

文本TXT,但典型的中缀 “2_07272011” 肯定有超过3个字符。改为尝试 "^RegZStmntAdj[A-Za-z0-9_]+\.txt$"