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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager