2012-07-20 3 views
2

Je dois supprimer des phrases d'une chaîne dans Ruby. Les phrases sont définies à l'intérieur d'un tableau. Cela pourrait ressembler à ceci:Supprimer des phrases dans Array de la chaîne

remove = ["Test", "Another One", "Something Else"] 

Ensuite, je veux vérifier et supprimer ceux-ci d'une chaîne donnée.

« Ceci est un test » => « Ceci est un » « Ceci est un autre » => « Ceci est » « Ceci est une autre Deux » => « Ceci est une autre Deux »

aide Ruby 1.9.3 et Rail 3.2.6.

Répondre

5
ary = ["Test", "Another One", "Something Else", "(RegExp i\s escaped)"] 
string.gsub(Regexp.union(ary), '') 

Regexp.union peut être utilisé pour compiler un tableau de chaînes (ou regexpes) en une seule expression rationnelle qui ne nécessite donc qu'une seule recherche & remplacer.

Regexp.union ['string', /regexp?/i] #=> /string|(?i-mx:regexp?)/ 
+0

vous êtes très bon développeur regexp)) –

1

Simplest (mais pas le plus efficace):

# Non-mutating 
cleaned = str 
remove.each{ |s| cleaned = cleaned.gsub(s,'') } 

# Mutating 
remove.each{ |s| str.gsub!(s,'') } 

plus efficace (mais moins clair):

# Non-mutating 
cleaned = str.gsub(Regexp.union(remove), '') 

# Mutating 
str.gsub!(Regexp.union(remove), '') 
Questions connexes