正则表达式匹配文件名

时间:2012-05-17 14:31:09

标签: sql regex vbscript

我有一个较小的SSIS包,我试图将文件名与VB Regex匹配并删除“说”文件。我的正则表达式看起来像这样,^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

2 个答案:

答案 0 :(得分:2)

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

  • BOS的文字RegZStmntAdj
  • 一个字符(\ n除外)
  • A-z,0-9和_ set
  • 的一个字符
  • 一个字符(\ n除外)
  • 一个点
  • EOS的文字提单

但是你的典型中缀“2_07272011”肯定有3个以上的字符。尝试 而是"^RegZStmntAdj[A-Za-z0-9_]+\.txt$"

答案 1 :(得分: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”结尾

我相信你正在寻找的东西。

相关问题