0

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

2 回答 2

2

"^RegZStmntAdj.[A-z0-9_].\.txt$"火柴

  • BOS 上的文字 RegZStmntAdj
  • 一个字符(\n 除外)
  • Az、0-9 和 _ 集合中的一个字符
  • 一个字符(\n 除外)
  • 一个点
  • EOS 上的文字 txt

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

于 2012-05-17T14:43:40.800 回答
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”结尾

我相信这就是您正在寻找的。

于 2012-05-17T14:37:28.670 回答