C'est le comportement de Perl qui me semble correct (entre deux caractères d'une chaîne, ce qui les sépare c'est "rien").
Bug du module re ?
C'est plus compliqué que ça. En résumé, il y a des discussions assez régulières là-dessus depuis 2004, qui stagnent pendant assez longtemps. Vers 2008, Van Rossum a tranché pour ne pas modifier le comportement actuel, puis as donné son accord pour éventuellement avoir le "bon" comportement avec un flag dédié. Mais il ne s'est rien passé... En tous cas, la doc actuelle pour 2.7 et 3.2 indique : "Note that split will never split a string on an empty pattern match."
Par la suite, ce sujet a été regroupé dans celui, plus vaste, de refondre le moteur d'expressions régulières de Python. Un nouveau moteur va être proposé dans Python 3.3 (à côté du moteur actuel), et ce nouveau moteur permet bien d'appeler split avec des patterns vides. Ouf !
C'est le comportement de Perl qui me semble correct (entre deux
caractères d'une chaîne, ce qui les sépare c'est "rien").
Bug du module re ?
C'est plus compliqué que ça. En résumé, il y a des discussions assez
régulières là-dessus depuis 2004, qui stagnent pendant assez longtemps.
Vers 2008, Van Rossum a tranché pour ne pas modifier le comportement
actuel, puis as donné son accord pour éventuellement avoir le "bon"
comportement avec un flag dédié. Mais il ne s'est rien passé... En tous
cas, la doc actuelle pour 2.7 et 3.2 indique : "Note that split will
never split a string on an empty pattern match."
Par la suite, ce sujet a été regroupé dans celui, plus vaste, de
refondre le moteur d'expressions régulières de Python. Un nouveau moteur
va être proposé dans Python 3.3 (à côté du moteur actuel), et ce nouveau
moteur permet bien d'appeler split avec des patterns vides. Ouf !
C'est le comportement de Perl qui me semble correct (entre deux caractères d'une chaîne, ce qui les sépare c'est "rien").
Bug du module re ?
C'est plus compliqué que ça. En résumé, il y a des discussions assez régulières là-dessus depuis 2004, qui stagnent pendant assez longtemps. Vers 2008, Van Rossum a tranché pour ne pas modifier le comportement actuel, puis as donné son accord pour éventuellement avoir le "bon" comportement avec un flag dédié. Mais il ne s'est rien passé... En tous cas, la doc actuelle pour 2.7 et 3.2 indique : "Note that split will never split a string on an empty pattern match."
Par la suite, ce sujet a été regroupé dans celui, plus vaste, de refondre le moteur d'expressions régulières de Python. Un nouveau moteur va être proposé dans Python 3.3 (à côté du moteur actuel), et ce nouveau moteur permet bien d'appeler split avec des patterns vides. Ouf !
C'est le comportement de Perl qui me semble correct (entre deux caractères d'une chaîne, ce qui les sépare c'est "rien").
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
et avec x+ [aaa,bbb]
Si le but est de découper en caractères, il y a mieux que les expressions régulières.
Pas toujours...
Le 13.02.2012 15:24, Alain Ketterlin a écrit :
YBM<ybmess@nooos.fr.invalid> writes:
Je n'arrive pas à m'expliquer la différence de comportement
de split entre Perl et Python :
C'est le comportement de Perl qui me semble correct (entre deux
caractères d'une chaîne, ce qui les sépare c'est "rien").
C'est une décision explicite : la doc dit "Note that split will never
split a string on an empty pattern match." Cela recouvre ton exemple,
mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
suis assez d'accord avec ce choix : par exemple, que devrait faire
re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
et avec x+
[aaa,bbb]
Si le but est de découper en caractères, il
y a mieux que les expressions régulières.
C'est le comportement de Perl qui me semble correct (entre deux caractères d'une chaîne, ce qui les sépare c'est "rien").
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
et avec x+ [aaa,bbb]
Si le but est de découper en caractères, il y a mieux que les expressions régulières.
Pas toujours...
Damien Wyart
* Alain Ketterlin in fr.comp.lang.python:
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
Pour information, avec le module regex donc je parle dans ma réponse principale, on obtient ceci :
regex.split('x*','aaaxxxbbb')
['aaa', 'bbb']
-- DW
* Alain Ketterlin <alain@dpt-info.u-strasbg.fr> in fr.comp.lang.python:
C'est une décision explicite : la doc dit "Note that split will never
split a string on an empty pattern match." Cela recouvre ton exemple,
mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
suis assez d'accord avec ce choix : par exemple, que devrait faire
re.split('x*','aaaxxxbbb') ?
Pour information, avec le module regex donc je parle dans ma réponse
principale, on obtient ceci :
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
Pour information, avec le module regex donc je parle dans ma réponse principale, on obtient ceci :
regex.split('x*','aaaxxxbbb')
['aaa', 'bbb']
-- DW
Damien Wyart
> C'est une décision explicite : la doc dit "Note that split will never > split a string on an empty pattern match." Cela recouvre ton exemple, > mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je > suis assez d'accord avec ce choix : par exemple, que devrait faire > re.split('x*','aaaxxxbbb') ?
* YBM in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu dans le nouveau module d'expressions régulières qui sera intégré à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et 3.2). -- DW
> C'est une décision explicite : la doc dit "Note that split will never
> split a string on an empty pattern match." Cela recouvre ton exemple,
> mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
> suis assez d'accord avec ce choix : par exemple, que devrait faire
> re.split('x*','aaaxxxbbb') ?
* YBM <ybmess@nooos.fr.invalid> in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire :
['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b']
?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu
dans le nouveau module d'expressions régulières qui sera intégré
à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et
3.2).
--
DW
> C'est une décision explicite : la doc dit "Note that split will never > split a string on an empty pattern match." Cela recouvre ton exemple, > mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je > suis assez d'accord avec ce choix : par exemple, que devrait faire > re.split('x*','aaaxxxbbb') ?
* YBM in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu dans le nouveau module d'expressions régulières qui sera intégré à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et 3.2). -- DW
YBM
Le 13.02.2012 15:54, Damien Wyart a écrit :
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
* YBM in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu dans le nouveau module d'expressions régulières qui sera intégré à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et 3.2).
c'est bien dommage, ce n'est pas logique... * est gourmand.
Le 13.02.2012 15:54, Damien Wyart a écrit :
C'est une décision explicite : la doc dit "Note that split will never
split a string on an empty pattern match." Cela recouvre ton exemple,
mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
suis assez d'accord avec ce choix : par exemple, que devrait faire
re.split('x*','aaaxxxbbb') ?
* YBM<ybmess@nooos.fr.invalid> in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire :
['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b']
?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu
dans le nouveau module d'expressions régulières qui sera intégré
à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et
3.2).
c'est bien dommage, ce n'est pas logique... * est gourmand.
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
* YBM in fr.comp.lang.python:
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?
Comme indiqué dans un autre message, ce n'est pas ce qui a été retenu dans le nouveau module d'expressions régulières qui sera intégré à Python 3.3 (mais peut aussi être compilé manuellement pour 2.7 et 3.2).
c'est bien dommage, ce n'est pas logique... * est gourmand.
Damien Wyart
> > > C'est une décision explicite : la doc dit "Note that split will never > > > split a string on an empty pattern match." Cela recouvre ton exemple, > > > mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je > > > suis assez d'accord avec ce choix : par exemple, que devrait faire > > > re.split('x*','aaaxxxbbb') ?
> > [a,b,c,d,e,f]
> Faute de frappe ? Je suppose que tu as voulu écrire : > ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] > ?
Du coup tu ne répondais pas à Alain alors que tu plaçait ta réponse juste après sa question. C'est un peu déroutant... -- DW
> > > C'est une décision explicite : la doc dit "Note that split will never
> > > split a string on an empty pattern match." Cela recouvre ton exemple,
> > > mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
> > > suis assez d'accord avec ce choix : par exemple, que devrait faire
> > > re.split('x*','aaaxxxbbb') ?
> > [a,b,c,d,e,f]
> Faute de frappe ? Je suppose que tu as voulu écrire :
> ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b']
> ?
* YBM <ybmess@nooos.fr.invalid> in fr.comp.lang.python:
> > > C'est une décision explicite : la doc dit "Note that split will never > > > split a string on an empty pattern match." Cela recouvre ton exemple, > > > mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je > > > suis assez d'accord avec ce choix : par exemple, que devrait faire > > > re.split('x*','aaaxxxbbb') ?
> > [a,b,c,d,e,f]
> Faute de frappe ? Je suppose que tu as voulu écrire : > ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] > ?
Du coup tu ne répondais pas à Alain alors que tu plaçait ta réponse juste après sa question. C'est un peu déroutant... -- DW
YBM
Le 13.02.2012 16:29, Damien Wyart a écrit :
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?
Du coup tu ne répondais pas à Alain alors que tu plaçait ta réponse juste après sa question. C'est un peu déroutant...
Euh... je me suis emmêlé les pinceaux avec mes différents tests et différent terminaux...
Ceci dit je voulais dire que, selon moi, ceci est logique :
['a','a','a','b','b','b'] pour re.split('x*','aaaxxxbbb')
Le 13.02.2012 16:29, Damien Wyart a écrit :
C'est une décision explicite : la doc dit "Note that split will never
split a string on an empty pattern match." Cela recouvre ton exemple,
mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je
suis assez d'accord avec ce choix : par exemple, que devrait faire
re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire :
['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b']
?
* YBM<ybmess@nooos.fr.invalid> in fr.comp.lang.python:
C'est une décision explicite : la doc dit "Note that split will never split a string on an empty pattern match." Cela recouvre ton exemple, mais aussi celui de la doc (re.split('x*', 'foo') renvoie 'foo'). Je suis assez d'accord avec ce choix : par exemple, que devrait faire re.split('x*','aaaxxxbbb') ?
[a,b,c,d,e,f]
Faute de frappe ? Je suppose que tu as voulu écrire : ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b'] ?