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

C# Discussion :

Expression régulière "récursive"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut Expression régulière "récursive"
    Bonjour,

    Je cherche à transformer des numéros de téléphone pour insérer des espaces insécables (html) entre leur nombre.

    par exemple

    0800 800 800 => 0800 800 800

    Je n'arrive pas à faire en sorte que l'expression reprenne le contenu déjà parsé.
    Par exemple:

    0800 80 08 00 => 0800 80 08 00

    L'espace du milieu n'est pas pris car le "80" n'est visiblement pas pris en compte la deuxième fois.

    J'ai actuellement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Regex r = new Regex ("([0-9]+) ([0-9]+)");
    html = r.Replace (html, "$1 $2");
    Qui ne fonctionne pas correctement.

    J'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex r = new Regex ("(?:([0-9]+) ([0-9]+))+");
    Pour mettre une répétition sur le pattern "[0-9]+ [0-9]+", mais ça ne fonctionne pas.

    J'imagine qu'il y a une option pour demander que la chaine soit parsée entièrement après chaque remplacement, mais je n'ai rien trouvé :/

    Et je ne peux pas fixer le nombre de nombres puisque tout peut etre différent

    0800 800 800
    0800 80 08 00
    021 123 45 67
    +41 21 123 45 67

    etc...


    Merci de votre aide

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu te prends la tête pour pas grand chose

    Remplace juste les suites de caractères d'espacement par  
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string newString = Regex.Replace(input, @"\s", " ");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string newString = Regex.Replace(input, @"\s+", " ");
    suivant que tu veuilles un espace insécable par caractère d'espacement ou bien pour la séquence entière.

    C'est à dire qu'avec la première solution 0800 0800 donnerait 0800  0800 alors qu'avec la seconde tu aurais 0800 0800

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    Oui mais je ne veux pas remplacer TOUS les espaces, juste ceux qui se trouvent entre des numéros de téléphone.


    imagine qu'on ait un texte avec à l'intérieur. le but est simplement d'éviter qu'un numéro de téléphone ait un retour à la ligne au milieu. le reste doit se comporter normalement.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Ah d'accord, il fallait le dire qu'il pouvait y avoir du texte à côté ^^

    Alors on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string newString = Regex.Replace(input, @"([0-9])\s+([0-9])", "$1 $2");
    afin de remplacer les caractères d'espacement entre deux chiffres.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    C'est ce que j'ai déjà, mais cela ne fonctionne pas si on a par exemple

    0800 1 65 564

    puisque le 1 dans ce cas est pris une seule fois.

    Je ne pense pas que ça risque d'arriver, mais tant qu'à faire un truc, autant le faire correctement.

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Essaye alors ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string newString = Regex.Replace(input, @"(?<=[0-9])\s+(?=[0-9])", "&nbsp;");

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

Discussions similaires

  1. [RegEx] Simple ou double quote dans une expression régulière
    Par Khleo dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2010, 15h58
  2. Expression Régulière avec Quote
    Par jon301 dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2006, 22h08

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