2017-01-22 4 views
0

Je suis en train de rechercher des fichiers spécifiques dans un répertoire en utilisant un modèleRecherche de fichiers avec un motif spécifique

Disons que j'ai l'identifiant de l'utilisateur - 101

ici sont mes fichiers

101 
101_2 
101_5 
10111 
103 
10125 
101_6 

Je suis en train de former un motif regex qui me donne uniquement les fichiers (101,101_2,101_5,101_6)

J'essaie le modèle ci-dessous

^101_?\d+$ 

mais il ne semble pas choisir du tout les fichiers. si je supprime les correspondances ^ .only 101_6 pour une raison quelconque.

EDIT:

J'utilise des rails/ruby ​​pour rechercher des fichiers dans le répertoire particulier. donc quelque chose comme

Dir.glob(location).grep("^101_?\d+$") 
do something 
end 
+1

Pouvez-vous montrer comment utilisez-vous regex pour trouver des fichiers? – chengpohi

+0

Essayez de remplacer '+' dans '^ 101 _? \ D + $' par '*'. –

+1

Si vous utilisez 'Dir.glob', c'est un glob, pas un regex. – Samadi

Répondre

0

Votre question n'est pas particulièrement claire, mais je devine que vous voulez faire correspondre tout ce qui est 101 suivi d'un trait de soulignement en option et un chiffre. Si c'est le cas, utilisez la regex ^101_?\d$. Si vous voulez 101 suivi soit un chiffre ou un trait de soulignement et un ou plusieurs chiffres, utilisez ^101(_\d+|\d)$

EDIT

Comme l'OP a mentionné dans un commentaire, 101 devrait également être mis en correspondance. La mise à jour est regex ^101(?:_?\d)?$

+0

J'essaie aussi de capturer un fichier 101 (pas de tiret bas). mais ensuite, il semble aussi capturer des fichiers comme 101124 ou 1011 etc. – Kannaj

+0

l'a compris .. cela fonctionne si j'utilise '^ 101 _? d d $ $ – Kannaj

+0

@Kunkka, utilisez'^101 (?: _? \ d) ? $ 'à la place. Votre correspondra '101_' – Samadi

1

Si location n'est pas le dossier en cours, les chemins retournés par glob contiendra dirname et basename:

Dir.glob('./*').select{ |f| File.basename(f) =~ /\A101(_\d+)?\z/ }.each do |f| 
    puts f 
    # do something with f 
end