2010-04-20 11 views
0

J'ai un fichier de texte principal et un fichier d'exceptions et je veux faire correspondre tous les mots du fichier d'exception avec le fichier principal et augmenter le compteur, mais l'astuce est avec les caractères génériques.J'ai des problèmes avec les caractères génériques dans le tableau

Je suis en mesure de le faire sans wildcards avec ceci:

words = %w(aaa aab acc ccc AAA) 
stop = %q(/aa./) 

words.each do |x| 
    if x.match(/aa./) 
    puts "yes for #{x}"   
    else  
    puts "no for #{x}" 
    end 
end 

=>

yes for aaa 
yes for aab 
no for acc 
no for ccc 
yes for AAA 

également ce qui serait la meilleure façon d'aller à ce sujet, en utilisant des tableaux ou d'une autre manière.

Editer: Désolé pour la confusion. Oui, l'arrêt a plusieurs caractères génériques et je veux faire correspondre tous les mots basés sur ces caractères génériques.

words = %w(aaa aab acc ccc AAA) 
stop = %q(aa* ac* ab*) 

Merci

Répondre

1

La description de vos besoins est vraiment vague. Mais soit les partition ou select méthodes de travail pour vous:

words = %w(aaa aab acc ccc AAA) 
re = %r(aa.)i 
p words.partition {|word| word.match(re)} # => [["aaa", "aab", "AAA"], ["acc", "ccc"]] 
p words.select {|word| word.match(re)}  # => ["aaa", "aab", "AAA"] 

MISE À JOUR

Sur la base de votre dernier commentaire:

stops= %q(aa* ac* ab*) 
stops.split.collect do |wildcard| 
    re = Regexp.new(wildcard, Regexp::IGNORECASE) 
    words.select {|word| word.match(re)} 
end 
# => [["aaa", "aab", "acc", "AAA"], ["aaa", "aab", "acc", "AAA"], ["aaa", "aab", "acc", "AAA"]] 

Si ces résultats vous surprennent, vous voudrez peut-être apprendre plus sur les expressions régulières, qui sont très différentes et plus puissantes que les motifs de type glob. Ruby ne fait pas de mise en correspondance globale sur les chaînes.

+0

Cela fonctionne pour une expression générique. Qu'en est-il des caractères génériques multiples? –

+0

@Senthil, que voulez-vous dire? Voulez-vous dire 'stop' est un tableau d'expressions rationnelles? Vous devez mettre à jour votre question et montrer ce que vous entendez par "plusieurs caractères génériques". –

+0

Oui. C'est ce que j'avais d'original 'stop =% q (aa * ac * ab *)' Merci –

Questions connexes