2010-08-21 12 views
2

Je suis impuissant sur les expressions régulières alors s'il vous plaît aidez-moi sur ce problème. Fondamentalement, je télécharge des pages Web et des flux rss et que vous voulez supprimer tout sauf des mots simples. Pas de points, de virgules, si, et, et mais. Littéralement j'ai une liste des mots les plus communs utilisés en anglais et je veux également dépouiller ceux-ci aussi mais je pense que je sais comment faire cela et n'ai pas besoin d'une expression régulière parce que ce serait vraiment long. Comment puis-je supprimer tout d'un bloc de texte à l'exception des mots délimités par des espaces?Expression régulière pour supprimer tout sauf les mots

Tout le reste va à la poubelle.

Cela fonctionne très bien grâce à Pavel .split(/[^[:alpha:]]/).uniq!

+0

Qu'en est-apostrophes (ou même apostrophes de marchand de légumes)? –

+0

ne fonctionne pas à partir d'eux. – s84

+0

nokogriri est probablement la meilleure solution ici parce que c'est un analyseur HTML et je suppose que l'on ne devrait pas utiliser regex pour le faire. – s84

Répondre

3

Je pense que ce qui vous convient le mieux serait de diviser la chaîne en mots. Dans ce cas, la fonction String::split serait la meilleure option. Il accepte une expression rationnelle qui correspond à des sous-chaînes, qui doivent scinder la chaîne source en éléments de tableau.

Dans votre cas, il doit s'agir de "quelques caractères non alphabétiques". Alphabétique character class est désigné par [:alpha:]. Alors, voici l'exemple de ce que vous avez besoin:

irb(main):001:0> "asd, <er>w , we., wZr,fq.".split(/[^[:alpha:]]+/) 
=> ["asd", "er", "w", "we", "wZr", "fq"] 

Vous pouvez filtrer davantage le résultat par intersecting the resultant array avec tableau qui ne contient que des mots anglais:

irb(main):001:0> ["asd", "er", "w", "we", "wZr", "fq"] & ["we","you","me"] 
=> ["we"] 
+0

wow, ça a l'air cool. travailler sur maintenant – s84

+0

ok qui a travaillé tout à fait, mais je suis en train de faire des chaînes vides dans le tableau – s84

+0

@Sam, peut-être, vous pouvez trouver des informations utiles dans la documentation 'split'? Il devrait contenir des conseils sur les situations dans lesquelles des chaînes vides apparaissent. –

0

essayer \b\w*\b faire correspondre des mots entiers

Questions connexes