Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expressions régulières

Sujet résolu
    14 juin 2017 à 23:57:36

    Bonjour,

    Est-il possible avec un pattern regex d'enlever un nombre inconnu de 0 au début de la communication et de retirer les 2 derniers chiffres ?

    Exemple : 001171730189

    Résultat : 11717301

    J'ai déjà le pattern ('[^0](\\d*)') pour les 0 mais je cale sur l'enlèvement des deux derniers nombres.

    Qu'un pourrait il m'aider ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2017 à 0:29:01

      Bonjour,

      ^ pour le début de chaîne, et $ pour la fin
      {2} pour préciser une occurrence de 2 fois l'expression

      "001171730189".replaceFirst("^0*", "")
                    .replaceFirst("\\d{2}$", "")

      -
      Edité par Pinguet62 15 juin 2017 à 10:10:44

      • Partager sur Facebook
      • Partager sur Twitter
      Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
        15 juin 2017 à 5:52:16

        Bonjour Pinguet,

        Petite coquille. C'est 0* pour la première.

        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2017 à 10:10:32

          brubru777 a écrit:

          Bonjour Pinguet,

          Petite coquille. C'est 0* pour la première.

          Au temps pour moi, je corrige. Merci ;)
          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
            15 juin 2017 à 10:30:03

            Hello,

            ^0*(\d+)\d{2}$

            la capture te retourne ton résultat final

            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2017 à 20:37:43

              Merci à tous pour vos réponses. Mais cela ne fonctionne pas chez moi. Vos réponses sont fort identiques à tous ce que j'ai pu trouver sur le net et essayer. D'où ma demande.

              Aussi, j'ai oublié de préciser que le pattern devra être stocké dans une base de données. C'est pourquoi j'ai besoin d'un pattern.

              C'est vrai aussi que je pourrais ajouter une variable dans la bd afin de choisir tel ou tel opération. Mais si le pattern peut le faire, cela serait plus simple.

              Aussi, j'ai l'impression que les [] sont obligatoires pour appliquer la négation.

              Voici une capture :

              -
              Edité par Mmmuzik 15 juin 2017 à 20:39:06

              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2017 à 21:25:42

                Le ^ représente le début de la chaine, pas la négation. Donc pas de crochets.

                La partie qui t'intéresse est dans le groupe entre parenthèses. C'est le premier groupe. Pour le récupérer, il faut utiliser group(1).

                • Partager sur Facebook
                • Partager sur Twitter
                  15 juin 2017 à 22:31:01

                  Alors maintenant, je ne comprend plus rien !

                  Ici une capture d'un tuto de developpez.com : http://cyberzoide.developpez.com/tutoriels/java/regex/

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    16 juin 2017 à 0:11:34

                    Testé sur un langage interprété, c'est fonctionnel !

                    >>> import re
                    >>> s = "001171730189"
                    >>> re.match("^0*(\d+)\d{2}$", s).group(1)
                    '11717301'
                    


                    EDIT: Une chose que tu as besoin de faire en java est de vérifier que tu as un résultat avec la méthode matches.

                    String s = "001171730189";
                    String pattern = "^0*(\\d+)\\d{2}$";
                    Pattern p = Pattern.compile(pattern);
                    Matcher m = p.matcher(s);
                    if (m.matches())
                        System.out.println(m.group(1));



                    -
                    Edité par Anonyme 16 juin 2017 à 0:49:27

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2017 à 6:39:30

                      Je l'ai pas tout à fait compris, mais j'ai trouvé le pattern qui fonctionne en Java ! C'est le principal.

                      Concernant l'interdiction d'afficher le/les premier(s) 0 voir aucun, je suis formel il faut [^0] !

                      Merci à tous pour votre aide !!!!

                      Pour ceux que cela intéresse (testé et approuvé) : "[^0].*(?!.?$)"

                      Matcher 321171730189 = 3211717301

                      Matcher 021171730189 = 211717301

                      Matcher 001171730189 = 11717301

                      Matcher 000000730189 = 7301

                      -
                      Edité par Mmmuzik 16 juin 2017 à 6:48:21

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juin 2017 à 9:47:35

                        si ^ est au début d'un group [] alors c'est une négation sinon, c'est l'indicateur de début de ligne

                        que tu utilises ^0*(\d+)\d{2}$ ou [^0].*(?!.?$), c'est à toi de choisir, il n'y a pas de solution unique. Prends celle qui te semble la plus facile à comprendre

                        La différence étant que la première match l'ensemble de ta chaine et y capture ce que tu cherches alors que la second solution ne sélectionnes que ce dont tu as besoin.

                        -
                        Edité par ukusan 16 juin 2017 à 9:49:30

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Expressions régulières

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown