0

ファイル名をVB Regexと一致させ、「言った」ファイルを削除しようとしている小さなSSISパッケージがあります。私の正規表現は次のよう^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
  • 1文字 (\n を除く)
  • Az、0-9、および _ セットの1文字
  • 1文字 (\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 に答える