IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

expressions régulières pour corriger la typographie d'un texte


Sujet :

Langage Perl

  1. #21
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Pour trouver une minuscule suivant une espace suivant un point, tu peux essayer la regex suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $minuscule = $1 if $string =~ /\. ([a-z])/;
    Mais cela ne trouvera pas les lettres minuscules accentuées. Tu peux éventuellement les ajouter à la classe de caractères, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $minuscule = $1 if $string =~ /\. ([a-zàéèùâêîôûç])/;
    Ou alors, essayer les classes Posix: [:lower:]

  2. #22
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Merci.
    Je comprends l'expression régulière mais je ne comprends pas $minuscule = $1.
    Quelle est son utilité ?

  3. #23
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    si je veux que ce soit aussi après un ? et un !
    je peux indiquer ceci : if $string =~ /\.?! ([a-z])/; ?

    merci

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    En typographie française, il y a une astuce pour connaitre la présence d'espace autour des signes de ponctuation (et que l'on peut utiliser comme règle) : les signes de ponctuation à un symbole (point, virgule) sont entouré d'un seul espace (après le signe), tandis que les signes à deux symboles (deux points, point-virgule, points d'interrogation ou d'exclamation, ...) sont entourés de deux espaces (un avant et un après le signe).
    Oui. Attention toutefois, l'espace devant le signe peut être fine (devant deux-points et point-virgule, en l'occurance), et doit être insécable dans tous les cas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    $1 récupère la "capture, c'est à dire le caractère reconnu par ce qui est entre parenthèses dans l'expression régulière, autrement dit, ici, la lettre minuscule suivant l'espace après le point.

    Pour essayer plusieurs signes de ponctuations, utilise une autre classe de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $minuscule = $1 if $string =~ /[.?!] ([a-z])/;
    Ce qui veut dire: soit un ".", soit un "?", soit un "!", suivi d'un espace, suivi d'une lettre comprise entre a et z.

  6. #26
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    C'est même encore plus compliqué, car la règle s'applique au français de France, pas complètement au français du Québec ou de Suisse.

    Pour l'expression régulière, le recherche d'espace devrait à mon sens contenir un quantifieur (au moins un). Dans le dernier exemple de Lolo, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $minuscule = $1 if $string =~ /\. +([a-zàéèùâêîôûç])/;
    D'ailleurs, en supposant qu'il puisse y avoir plusieurs erreurs de typo (manque l'espace après le . et minuscule après un point), il faudrait être encore plus laxiste et accepter zéro ou plus d'espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $minuscule = $1 if $string =~ /\. *([a-zàéèùâêîôûç])/;
    Ensuite, il faut aussi prévoir que ligne de texte puisse contenir plusieurs fois la même erreur de typo (manque d'une majuscule par exemple) et dans ce cas, soit prévoir une regexp avec l'option /g (et sans doute une boucle for ou foreach, bien que cela puisse parfois être évité), soit une boucle while avec une regexp sans l'option /g.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #27
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    J'avais bien pensé aux espaces doubles, mais comme la série d'expressions régulières retire les doubles espaces, la recherche d'éventuels espaces doublés après les signes de ponctuation n'était à mon avis pas nécessaire (à condition bien sûr de faire les choses dans le bon ordre).

    Pour l'éventuelle absence d'espace entre la ponctuation et la lettre qui suit, ce n'est effectivement sans doute pas superflu, mais je le ferais avant dans une autre regex, afin de corriger également les ponctuations suivies immédiatement d'une lettre capitale.

  8. #28
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    J'ai en effet réalisé une expression régulière pour mettre un espace après les points, points d'interrogation et points d'exclamation.
    Merci pour toutes ces explications !
    Je me lance dans les espaces entre les chiffres maintenant, j'aurai encore sûrement des questions !!

  9. #29
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Je voudrais espacer mes chiffres par un point : 123.456.789
    Je pensais spliter mes chiffres dans un tableau soit sur un espace, soit sur rien (123 456 789 ou 123456789)
    et puis les rassembler 3 par 3 avec un point en commençant par la droite.
    Est-ce que ça vous semble faisable ?
    merci

  10. #30
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emycherie02 Voir le message
    Je voudrais espacer mes chiffres par un point : 123.456.789
    Normalement c'est une espace insécable.
    Citation Envoyé par Emycherie02 Voir le message
    Je pensais spliter mes chiffres dans un tableau soit sur un espace, soit sur rien (123 456 789 ou 123456789)
    et puis les rassembler 3 par 3 avec un point en commençant par la droite.
    Attention aux nombres à virgules (1235,50253428 => 1 235,502 534 28).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #31
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Voici peut-être une uniligne qui t'aidera peut-être à trouver une solution pour l'espaçage des nombres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -E '$a = "1254654.232"; while ($a =~ s/(\d)(\d{3})(\D|$)/$1 $2$3/) {} ; say $a'
    1 254 654.232
    Attention, elle ne fonctionne pas si les chiffres après la virgules sont plus nombreux que 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -E '$a = "1254654.25216532"; while ($a =~ s/(\d)(\d{3})(\D|$)/$1 $2$3/) {} ; say $a'
    1 254 654.25 216 532
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #32
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Merci joel.drigo pour la correction.
    Philou67430, peux-tu m'expliquer l'expression, principalement cette partie-ci \D|$)/$1 $2$3/)
    Est-ce que s'il n'y a que 4 chiffres 1 234 ou 7 chiffres 1 234 567, ça fonctionne aussi ?

  13. #33
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    L'expression régulière (s/(\d)(\d{3})(\D|$)/$1 $2$3/) que j'ai écrite fonctionne ainsi : elle cherche une série de 4 chiffres consécutifs suivi d'un caractère quelconque qui n'est pas un chiffre (cela peut être un espace, une virgule, un point ou même un pseudo-caractère fin de chaine ($).
    Le premier chiffre de la série de 4 recherchée est "rangé" dans une variable de recherche à l'aide des parenthèses capturantes (il se retrouvera dans $1). La série de 3 chiffres suivant se retrouve dans une deuxième variable $2, et le caractère non numérique qui suit sera quant à lui rangé dans une troisième variable, toujours grâce aux parenthèses capturantes ($3).
    Ensuite, on reconstruit la chaine de remplacement en insérant une espace entre la première et la deuxième capture.

    En relisant, je m'aperçois qu'il est possible de simplifier en capturant dans une unique variable les trois chiffres et le "non-chiffre" qui suit :
    s/(\d)(\d{3}(?:\D|$))/$1 $2/

    Ensuite, comme on boucle tant qu'il existe des suites de 4 chiffres dans la chaine, on traitre tous les nombres de plus quatre chiffres au moins (la substitution se réalise alors à partir de la droite de tous les nombres d'une chaine en commençant par la nombres les plus à gauche. Exemple des itérations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Valeur initiale :
    12345678 toto 987654
    itération 1 : 12345 678 toto 987654
    itération 2 : 12 345 678 toto 987654
    itération 3 : 12 345 678 toto 987 654
    On pourrait ajouter l'option /g à l'expression régulière, ainsi, tous les nombres seraient traités lors d'une itération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Valeur initiale :
    12345678 toto 987654
    itération 1 : 12345 678 toto 987 654
    itération 2 : 12 345 678 toto 987 654
    Je n'ai aucune idée si ce serait plus rapide que la méthode précédente.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  14. #34
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Il parait qu'il existe un module qui gère ce genre de chose ?
    on me suggère de procéder comme suit :
    1/ placez les chiffres individuellement dans un tableau;
    2/ Parcourez le tableau de la fin vers le début;
    (alternative peut-être plus simple : inversez le tableau et parcourez-le du
    début à la fin)
    3a/ Concaténez chaque chiffre à une chaîne de caractères et,
    3b/ tous les trois chiffres, concaténez une espace insécable
    (Pour identifier ces séquences de trois chiffres, vous pouvez utiliser un
    compteur et un modulo).

    Je trouvais ton expression régulière, Philou67430, assez claire !
    Quelle est la différence entre les deux méthodes ?

  15. #35
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    L'expression régulière est concise et intègre l'algorithme complet de parcours, d'extraction, de transformation des nombres et de ré-intégration dans la chaine. L'alternative demande de tout écrire "à la main". L'inconvénient de l'expression régulière, c'est qu'elle nécessite une certaine expertise pour être comprise et maintenue, et dans le cas présent, qu'elle ne fonctionne pas sur les nombres décimaux. Pour l'écriture "à la main", l'avantage est que l'on maitrise totalement l'implémentation et que l'on peut donc définir le fonctionnement comme on le souhaite, l'inconvénient majeur est qu'il nécessite un effort de développement (conceptions, déverminage et tests fonctionnels plus poussés qu'avec l'expression régulière).

    Une autre alternative est effectivement d'utiliser un module (du CPAN par exemple) qui fasse la conversion : Number::Format.
    Cette dernière alternative a de nombreux avantages : ne nécessite aucune expertise sur le formatage des nombres, l'implémentation d'un algorithme, la gestion de la locale (c'est à dire de la langue dans laquelle les nombres doivent être représentés).
    Regarde particulièrement le formatage avec THOUSANDS_SEP (qu'il est possible de passer en paramètre au constructeur du convertisseur ; je n'ai pas réussi à faire fonctionner la locale "fr" pour que THOUSANDS_SEP contienne automagiquement un espace).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  16. #36
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    une solution intermédiaire entre une regex unique et une décomposition plus poussée, en découpant préalablement le nombre en entrée entre sa partie entière et sa partie fractionnaire. Et ça paraît marcher pour les chiffres après la virgule. La démonstration est faite ici sous le debugger Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      DB<1>  $a = "1254654.23245678";
     
      DB<2> ($b, $c) = split /\./, $a;
     
      DB<3> $b = reverse $b;
     
      DB<4> s/(\d{3})/$1 /g for ($b, $c)
     
      DB<5> $d = reverse($b) .  ".$c";
     
      DB<6> p $d
    1 254 654.232 456 78
    J'ai préféré ici faire un reverse sur la partie entière, car cela permet d'utiliser la même regex très simple sur les deux morceaux. On pourrait ne pas faire de reverse et utiliser deux regex différentes.

    Sinon, une autre méthode possible pour un nombre entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ perl -e ' $c = reverse "1234567891012"; print scalar  reverse  join "",   map  { s/(\d{3})/$1 /gr  } ($c); '
    1 234 567 891 012

  17. #37
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Merci Lolo78, ça a l'air de bien fonctionner mais il y a beaucoup de choses que je n'ai pas vues au cours et je ne peux pas les utiliser :/

    Je cherche des infos pour concaténer un chiffre à une chaine de caractère.
    Quelqu'un a une idée ?

  18. #38
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    La concaténation se fait soit à l'aide de l'opérateur . (point), soit à l'aide d'une chaine littérale interpolée ("" ou opérateur qq() ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $chiffre = 1;
    my $chaine = "toto";
    say join "\n", $chaine.$chiffre, "$chaine$chiffre", qq($chaine$chiffre);
    Sinon, la solution proposée par Lolo implique d'avoir extrait le nombre de la chaine initiale, et de le remplacer ensuite par la chaine additionnée des espaces (et là, le plus pratique reste tout de même, me semble-t-il, la substitution par regexp).

    Mis à part cela, il est à noter que les décimales d'un nombre à virgule ne sont pas impactées par la fonction de formatage numérique du module Number::Format. Je ne suis pas loin de penser que ce n'est pas requis (mais je n'ai pas suffisamment d'expertise en typographie pour l'affirmer).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -MNumber::Format -E '$n = Number::Format->new(-thousands_sep => " ", -decimal_digits => 10); say $n->format_number(10000.45498)'
    10 000,45498
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  19. #39
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    j'ai quelques lignes de code qui sont apparemment en Python, je voudrais les transposer en Perl.
    Pouvez-vous m'aider ?
    Merci !


    my $ct_num =~ /^\d+$/
    my @tab = split (/.||/, my $ct_num);
    my @tab_invers = reverse @tab;
    my $i = 0;
    my nb = "";

    foreach my $chiffre ( @tab_invers ){
    $nb = $nb . $chiffre;
    i++;
    print $nb;
    if $i == 3 {
    $nb = $nb . " ";
    i = 0;

    }
    }

  20. #40
    Candidat au Club
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 3
    Points
    3
    Par défaut
    J'avais suivi vos recommandations mais apparemment, la syntaxe est défaillante ???

    $minuscule = $1;


    if ( my $string =~ /[.?!] ([a-zàéèùâêîôûç])/g ) {


    say (<check type="majuscule">$minuscule</check>);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Expression régulière pour supprimer des doublons
    Par cbroissa dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2017, 01h59
  2. [RegEx] Expression régulière pour trouver des mots
    Par cbroissa dans le forum Langage
    Réponses: 7
    Dernier message: 26/05/2006, 23h39
  3. [RegEx] Simple expression régulière pour ereg_replace
    Par aurapp dans le forum Langage
    Réponses: 6
    Dernier message: 12/03/2006, 12h34
  4. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00
  5. Expression Régulière pour float
    Par zebiloute dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo