我有一个较小的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
答案 0 :(得分:2)
"^RegZStmntAdj.[A-z0-9_].\.txt$"
匹配
但是你的典型中缀“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”结尾
我相信你正在寻找的东西。