web-dev-qa-db-fra.com

Fractionner la chaîne par plusieurs délimiteurs

Je souhaite fractionner une chaîne par des espaces, , Et ' En utilisant une seule commande Ruby.

  1. Word.split Sera divisé par des espaces blancs;

  2. Word.split(",") sera divisé par ,;

  3. Word.split("\'") sera divisé par '.

Comment faire les trois à la fois?

52
Karan Verma
Word = "Now is the,time for'all good people"
Word.split(/[\s,']/)
 => ["Now", "is", "the", "time", "for", "all", "good", "people"] 
120
Cary Swoveland

Regex.

"a,b'c d".split /\s|'|,/
# => ["a", "b", "c", "d"]
34
oldergod

En voici un autre:

Word = "Now is the,time for'all good people"
Word.scan(/\w+/)
# => ["Now", "is", "the", "time", "for", "all", "good", "people"]
20
Arup Rakshit

Vous pouvez utiliser une combinaison de la méthode split et de la Regexp.union méthode comme ceci:

delimiters = [',', ' ', "'"]
Word.split(Regexp.union(delimiters))
# => ["Now", "is", "the", "time", "for", "all", "good", "people"]

Vous pouvez même utiliser des patrons regex dans les délimiteurs.

delimiters = [',', /\s/, "'"]
Word.split(Regexp.union(delimiters))
# => ["Now", "is", "the", "time", "for", "all", "good", "people"]

Cette solution a l'avantage de permettre des délimiteurs totalement dynamiques ou de toute longueur.

10
James Stonehill
x = "one,two, three four" 

new_array = x.gsub(/,|'/, " ").split
3
Beartech