2011-01-17 3 views
4

Je veux gsous tous les caractères d'une chaîne qui ne sont pas des lettres et les remplacer par '#'. Je pense que j'ai besoin d'une expression régulière qui ressemble à quelque chose comme "gsub() quand cette expression rationnelle ne correspond pas".Ruby Regex Gsub quand ne correspond pas

Des idées?

Répondre

12

Regardez ma , sans regex ...

str.tr('^A-Za-z', '#') 
+0

+1 translittérer – sln

+0

Très belle solution. Convient parfaitement à la facture, merci. – Mike

+2

'^ A-Za-z' est totalement regex: P – RGB

9
str.gsub(/[^a-zA-Z]/, '#') 

Les ^ moyens ne correspond pas à

+0

Merci un million! –

4

Bien sûr, vous pouvez utiliser la négation de la classe de caractères:

"aBc$%^".gsub(/[^A-Za-z]/, '#') => "aBc###"

1

Essayez this sur CodePad:

puts "kjhdfuy37685682#$$%@dfjahf".gsub(/[^a-z]/i, '#') 
1

Mots ne comptent

tous caractère s ... remplacer par '#' str.gsub(/[^a-zA-Z]+/, '#')

chaque caractère ... remplacer par '#' str.gsub(/[^a-zA-Z]/, '#')