OVH Cloud OVH Cloud

expression régulière - accent

6 réponses
Avatar
nicolas_laurent545
Comment emp=EAcher cette expression r=E9guli=E8re de ne pas voir le
r=E9sultat 2
's/(ai)(\s)(=E9t=E9)(\s)(\p{IsAlpha}.*)(=E9)(\s)/\<\1\2\3\4\5\6>/g'


1=2E j'<ai =E9t=E9 d=E9tr=F4n=E9>
2=2E ghhj k=E9kk lajsdfl iuypir=E9 j'<ai =E9t=E9 d=E9tr=F4n=E9 ghhj kkkk la=
jsdfl
iuypir j'ai =E9t=E9 mi kkjljfD j'ai =E9t=E9 sauv=E9 jjgfsaj j'ai =E9t=E9 mis
lllll j'ai =E9t=E9>ni personne logk jjhgfd

J'ai essay=E9 sans succ=E8s ces expressions
's/(ai)(\s)(=E9t=E9)(\s)(\p{IsAlpha}+)(=E9)(\s)/\<\1\2\3\4\5\6>/g'
's/(ai)(\s)(=E9t=E9)(\s)(\p{IsAlpha}*?)(=E9)(\s)/\<\1\2\3\4\5\6>/g'
's/(ai)(\s)(=E9t=E9)(\s)(\p{IsAlpha}+?)(=E9)(\s)/\<\1\2\3\4\5\6>/g'=20

Merci

6 réponses

Avatar
Nicolas George
wrote in message
:
J'ai essayé sans succès ces expressions
's/(ai)(s)(été)(s)(p{IsAlpha}+)(é)(s)/<123456>/g'
's/(ai)(s)(été)(s)(p{IsAlpha}*?)(é)(s)/<123456>/g'
's/(ai)(s)(été)(s)(p{IsAlpha}+?)(é)(s)/<123456>/g'


Toutes devraient marcher, je crois, si la chaîne sur laquelle tu les testes
est bien en Unicode (utf8::is_utf8 $s doit être vrai).

Avatar
Nicolas George
wrote in message
:
's/(ai)(s)(été)(s)(p{IsAlpha}.*)(é)(s)/<123456>/g'


Soit dit en passant, la notation 1, 2... est obsolète dans le chaîne de
remplacement, il est conseillé d'utiliser $1, $2... à la place.

Avatar
nicolas_laurent545
Nicolas George wrote:
wrote in message
:
J'ai essayé sans succès ces expressions
's/(ai)(s)(été)(s)(p{IsAlpha}+)(é)(s)/<123456>/g'
's/(ai)(s)(été)(s)(p{IsAlpha}*?)(é)(s)/<123456>/g'
's/(ai)(s)(été)(s)(p{IsAlpha}+?)(é)(s)/<123456>/g'


Toutes devraient marcher, je crois, si la chaîne sur laquelle tu les te stes
est bien en Unicode (utf8::is_utf8 $s doit être vrai).


Je regrette le texte est bien en utf-8, ces expressions ne voient pas
les accents dans détrôné.


Avatar
Nicolas George
wrote in message
:
Je regrette le texte est bien en utf-8, ces expressions ne voient pas
les accents dans détrôné.


Je viens de tester, et ça fonctionne chez moi. Mais il ne faut pas que le
texte soit « en UTF-8 » (ce qui ne veut rien dire pour un texte, ça
s'applique à la représentation informatique d'un texte, or Perl abstrait
ça), mais bien que la variable soit de type chaîne de caractères Unicode et
pas chaîne d'octets.

De toute évidence, ce n'est pas le cas ici. Que se passe-t-il si tu
ajoutes :

die unless utf8::is_utf8 $_;

avant la substitution (avec autre chose que $_ si le texte à substituer est
ailleurs) (les noms des fonctions de perl sont mal choisis, ça s'écrit utf8
mais ça ne veut pas dire UTF-8) ?

Ah, et bien sûr, il faut un perl 5.8, ou à l'extrême rigueur 5.6.

Avatar
nicolas_laurent545
Nicolas George wrote:
wrote in message
:
Je regrette le texte est bien en utf-8, ces expressions ne voient pas
les accents dans détrôné.


Je viens de tester, et ça fonctionne chez moi. Mais il ne faut pas que le
texte soit « en UTF-8 » (ce qui ne veut rien dire pour un texte, ça
s'applique à la représentation informatique d'un texte, or Perl abstr ait
ça), mais bien que la variable soit de type chaîne de caractères Un icode et
pas chaîne d'octets.

De toute évidence, ce n'est pas le cas ici. Que se passe-t-il si tu
ajoutes :

die unless utf8::is_utf8 $_;

avant la substitution (avec autre chose que $_ si le texte à substituer est
ailleurs) (les noms des fonctions de perl sont mal choisis, ça s'écri t utf8
mais ça ne veut pas dire UTF-8) ?

Ah, et bien sûr, il faut un perl 5.8, ou à l'extrême rigueur 5.6.


Ce que vous m'expliquer va au delà de mes compétences. Ce que je fais
est le suivant en mode commande.

perl -pi -e
's/(ai)(s)(été)(s)(p{IsAlpha}+)(é)(s)/<$1$2$3$4$5$6>/g'
test.txt

test:
j'ai été détrôné ghhj kékk lajsdfl iuypiré j'ai été dét rôné
ghhj kkkk lajsdfl iuypir j'ai été mi kkjljfD j'ai été sauvé
jjgfsaj j'ai été mis lllll j'ai été ni personne logk jjhgfd


Avatar
Nicolas George
wrote in message
:
Ce que vous m'expliquer va au delà de mes compétences.


Je suis en train d'écrire un article sur la gestion d'Unicode dans Perl,
mais ça fait pas mal de temps que je traîne.

Ce que je fais
est le suivant en mode commande.

perl -pi -e
's/(ai)(s)(été)(s)(p{IsAlpha}+)(é)(s)/<$1$2$3$4$5$6>/g'
test.txt

test:
j'ai été détrôné ghhj kékk lajsdfl iuypiré j'ai été détrôné
ghhj kkkk lajsdfl iuypir j'ai été mi kkjljfD j'ai été sauvé
jjgfsaj j'ai été mis lllll j'ai été ni personne logk jjhgfd


Si le fichier et la ligne de commande sont bien en UTF-8, alors ceci devrait
marcher :

- ajouter « -Mutf8 » à la ligne de commande ;

- ajouter au début du code perl :

BEGIN{binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";}