2012-05-17 4 views
0

J'ai un plus petit paquet SSIS que j'essaye de faire correspondre un nom de fichier avec VB Regex et de supprimer le fichier "dit". Mon regex ressemble à ceci, ^RegZStmntAdj.[A-z0-9_].\.txt$, et j'essaie de comprendre pourquoi il ne correspondra à aucun des fichiers dans le répertoire. C'est une syntaxe valide si je pense correctement.Expression régulière Correspondre les noms de fichiers

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

Si je lance le regex avec ^RegZStmntAdj.*.\.txt$, il correspond aux fichiers corrects et les supprime. Je sais * fonctionne, mais j'aimerais apprendre à faire des expressions régulières plus précises.

RegZStmntAdj2_07272011.txt 
RegZStmntAdj1_07272011.txt 

Répondre

1

Essayez la Regex suivante:

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

Je l'ai utilisé \w, qui est le même que A-Za-z0-9, et a dit qu'il corresponde à 9 caractères afin qu'il corresponde à la _<date> partie de votre nom de fichier . Vous correspondiez seulement au premier caractère à partir de là (c'est-à-dire le trait de soulignement).

En utilisant Powershell pour vérifier:

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!!) 

Pour rendre votre regex encore plus précis, vous pouvez utiliser ^RegZStmntAdj\d_[\d]{8}\.txt$, ce qui se traduit par:

Une chaîne commençant par "RegZStmntAdj", puis un chiffre , puis un underscore, puis 8 chiffres, puis se terminant par « txt »

que je crois est ce que vous sont en train de chercher.

2

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

  • RegZStmntAdj littéral à BOS
  • un caractère (sauf \ n)
  • un caractère de l'Az, 0-9 et _ mis
  • un caractère (sauf \ n)
  • un point
  • txt littérale à EOS

mais votre infix typique "2_07272011" a sûrement plus de 3 caractères. Essayez "^RegZStmntAdj[A-Za-z0-9_]+\.txt$" à la place.

Questions connexes