2 votes

Expression régulière pour supprimer tout sauf les mots

Je suis impuissant sur les expressions régulières donc s'il vous plaît aidez-moi sur ce problème.

En gros, je télécharge des pages web et des flux rss et je veux tout enlever sauf les mots simples. Pas de points, de virgules, de "si", de "et", de "mais". Littéralement, j'ai une liste des mots les plus courants utilisés en anglais et je veux aussi les dépouiller, mais je pense savoir comment faire et ne pas avoir besoin d'une expression régulière parce que ce serait vraiment trop long.

Comment supprimer tout ce qui se trouve dans un morceau de texte, sauf les mots délimités par des espaces ? Tout le reste va à la poubelle.

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

3voto

Pavel Shved Points 34706

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

Dans votre cas, ce devrait être "certains caractères non alphabétiques". Alphabétique classe de caractères est dénoté par [:alpha:] . Voici donc l'exemple de ce dont vous avez besoin :

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

Vous pouvez encore filtrer le résultat par l'intersection du tableau de la résultante avec un tableau qui ne contient que des mots anglais :

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

0voto

ennuikiller Points 28005

Essayez \b\w*\b pour associer des mots entiers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X