2 votes

Comment sélectionner des mots composés de la même lettre à l'aide d'une expression rationnelle ?

J'ai un fichier texte de dictionnaire qui contient des mots que je ne veux pas.

Exemple :

aa
aaa
aaaa
bb
b
bbb

etc.

Je souhaite utiliser une expression régulière pour sélectionner ces mots et les supprimer. Cependant, ce que j'ai semble devenir trop long et il doit y avoir une approche plus efficace.

Voici mon code jusqu'à présent :

/^a{1,6}$|^b{1,6}$|^c{1,6}$|^d{1,6}$|^e{1,6}$|^f{1,6}$|^g{1,6}$|^[i]{2,3}$/

Il semble que je doive le faire pour chaque lettre. Comment pourrais-je le faire de manière plus succincte ?

3voto

tadman Points 70178

Il est beaucoup plus facile de réduire le mot à des lettres uniques et de supprimer toutes celles qui ne contiennent qu'une seule lettre :

words = "aa aaa aaaa bb b bbb etc aab abcabc"

words.split(/\s+/).select do |word|
  word.chars.uniq.length > 1
end
# => ["etc", "aab", "abcabc"]

Cette méthode divise votre chaîne en mots, puis sélectionne uniquement les mots qui contiennent plus d'un type de caractère ( .chars.uniq )

2voto

rich remer Points 835

^([a-z]) \1 ? \1 ? \1 ? \1 ? \1 ?$

Correspondre à n'importe quelle lettre, suivie de 5 renvois facultatifs à la lettre initiale.

Cela pourrait également fonctionner :

^([a-z]) \1 {,5}$

1voto

Ibrahim Points 3280

Essayez ceci

\b([a-zA-Z])\1*\b

si vous souhaitez inclure (en plus des lettres) des chiffres répétés ou des traits de soulignement, utilisez ce code :

\b([\w])\1*\b

Mise à jour :

Exclure I d'être enlevés :

(?i)ii+|\b((?i)[a-hj-z])\1*\b

(?i) est ajouté ci-dessus pour que les lettres ne soient pas sensibles à la casse.

Démonstration : https://regex101.com/r/gFUWE8/7

0voto

Rizwan M.Tuman Points 7860

Vous pouvez essayer avec cette expression rationnelle :

\b([a-z])\1{0,}\b

et le remplacer par le vide

Exemple de code Ruby :

re = /\b([a-z])\1{0,}\b/m
str = 'aa aaa aaaa bb b bbb abc aa a pqaaa '
result = str.gsub(re,'')
puts result

Exécutez le code ici

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