salut tout le monde,
je veux transformer les mots qui ont deux lettres qui se répètent plus de 2 fois en utilisant les expression régulière. comment faire ça?. pour mieux expliquer voici un exemple:
blablablabla->bla
hahahahaha->ha
Version imprimable
salut tout le monde,
je veux transformer les mots qui ont deux lettres qui se répètent plus de 2 fois en utilisant les expression régulière. comment faire ça?. pour mieux expliquer voici un exemple:
blablablabla->bla
hahahahaha->ha
Salut,
Pour les chaines ayant une sous-chaine de longueur indéfinie se répétant plus de 2 fois (en Python 2.X) :
qui donne :Code:
1
2
3 import re for chaine in (u'blablablabla',u'hahahahaha'): print re.sub( pattern=r'(.+)\1{2,}', repl=r'\1', string=chaine)
Code:
1
2 bla ha
merci arnoud, mais une fois le nombre de caractères répétés dépasse six caractères, il ne donne pas les résultat attendus.
par exemple : blablablablablablablablablablablabla
et loooooovvvvve. merci d'avance.
Salut,
Une fonction récursive résout le problème :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 import re pattern = re.compile(r'(.+)\1{1,}') def supprime_doublons(ch1): ch2 = re.sub( pattern, repl=r'\1', string=ch1) if ch1 == ch2: return ch2 else: return supprime_doublons(ch2) if __name__ == '__main__': tests = (u'blablablabla',u'hahahahaha',u'blablablablablablablablablablablabla',u'loooooovvvvve') for chaine in tests: print supprime_doublons(chaine)
Code:
1
2
3
4 bla ha bla love
Il y a plus simple, il suffit d’utiliser un opérateur non-glouton (donc qui consomme aussi peu de caractères que possible)*:
Code:
1
2
3 import re for chaine in (u'blablablabla', u'hahahahaha', u'loooooovvvvve'): print re.sub(pattern=r'(.+?)\1{2,}', repl=r'\1', string=chaine)
merci pour vos réponses.
mais dans le cas la chaine 'goooooood', il me donne la résultat 'god', alors que je veux avoir le mot 'good'. merci d'avance.
Oui, si tu cherches à faire un correcteur orthographique, les regex ne sont pas l’outils idéal*! Regarde plutôt du côté de enchant, par exemple… :mouarf: