J'essaie d'analyser les mots d'une chaîne et de les mettre dans un tableau. J'ai essayé la chose suivante:
@string1 = "oriented design, decomposition, encapsulation, and testing. Uses "
puts @string1.scan(/\s([^\,\.\s]*)/)
Cela semble faire l'affaire, mais c'est un peu fragile (je devrais inclure plus de caractères spéciaux, par exemple). Y a-t-il une meilleure façon de le faire en rubis?
Facultatif: j'ai une description du cours cs. J'ai l'intention d'extraire tous les mots et de les placer dans un tableau de chaînes, de supprimer du tableau le mot le plus courant en anglais, puis d'utiliser le reste des mots comme balises que les utilisateurs peuvent utiliser pour rechercher cs cours.
La commande split.
words = @string1.split(/\W+/)
divisera la chaîne en un tableau basé sur une expression régulière.\W signifie n'importe quel caractère "non-Word" et le "+" signifie de combiner plusieurs délimiteurs.
Eh bien, vous pouvez diviser la chaîne d'espaces si c'est votre délimiteur d'intérêt
@string1.split(' ')
Ou diviser les limites du mot
\W # Any non-Word character
\b # Any Word boundary character
Ou sur des non-mots
\s # Any whitespace character
Astuce: essayez de tester chacun de ceux-ci sur http://rubular.com
Et notez que Ruby 1.9 a quelques différences par rapport à 1.8
Pour moi, le meilleur pour séparer des phrases est:
line.split(/[^[[:Word:]]]+/)
Même avec des mots multilingues et des signes de ponctuation fonctionnent parfaitement:
line = 'English words, Polski Żurek!!! crème fraîche...'
line.split(/[^[[:Word:]]]+/)
=> ["English", "words", "Polski", "Żurek", "crème", "fraîche"]
Pour Rails, vous pouvez utiliser quelque chose comme ceci:
@string1.split(/\s/).delete_if(&:blank?)