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

VB.NET Discussion :

extraction d'une chaine entre parenthéses


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut extraction d'une chaine entre parenthéses
    Bonjour,

    j'ai une chaine de caractère qui peut contenir une adresse sous plusieurs forme, exemple :

    45 Rue des lilas
    Hotel de ville (R. Hugo)
    Mc donalds (AV. Mitterand)
    Rue kennedy (X arrondissement)


    j'utilise après cet adresse pour réaliser une itinéraire sur microsoft mappoint,
    pour la première adresse pas de soucis c'est clair
    par contre pour la deuxième et troisième, l'adresse est entre parenthèse devant figure l'établissement ou le lieu public, et dans ces cas il me faut l'adresse entre parenthèse (seulement lorsque j'ai AV. ou R.) car dans le dernier exemple je dois supprimer "(X arrondissement)" car l'adresse est devant.
    alors j'ai concocté une petite fonction qui permet si il y a présence de "(" avec "R." ou "AV." de recupére alors l'adresse entre parenthèse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function adresse_mod(ByVal adresse As String) As String
            'Dim par_r As String = adresse.IndexOf("R.")
            'Dim par_av As String = adresse.IndexOf("AV.")
            'Dim par_pl As String = adresse.IndexOf("PL.")
            Dim debut_par As Integer = adresse.IndexOf("(")
            Dim fin_par As Integer = adresse.IndexOf(")")
            Dim par_r As Integer = adresse.IndexOf("R.")
            Dim par_av As String = adresse.IndexOf("AV.")
            Dim par_pl As String = adresse.IndexOf("PL.")
            If debut_par > -1 And par_r > -1 Or par_av > -1 Or par_pl > -1 Then
                Return adresse.Substring((debut_par + 1), (fin_par - 1))
            Else
                Return adresse
            End If
        End Function
    LE PROBLÈME c'est ce message d'erreur :
    L'index et la longueur doivent faire référence à un emplacement situé dans la chaine
    Nom du paramètre : length
    ????

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    en me creusant la tête j'ai pondu ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Public Function adresse_mod(ByVal adresse As String) As String
            Dim debut_par As Integer = adresse.IndexOf("(")
            Dim par_r As Integer = adresse.IndexOf("R.")
            Dim par_av As String = adresse.IndexOf("AV.")
            Dim par_pl As String = adresse.IndexOf("PL.")
            If debut_par > -1 And par_r > -1 Or par_av > -1 Or par_pl > -1 Then
                Return adresse.Substring((debut_par + 1)).Replace(")", "").Replace("AV.", "Avenue").Replace("R.", "Rue").Replace("PL.", "Place")
            Else
                Return adresse
            End If
        End Function
    qu'est ce que vous en pensez ? c'est assez propre comme code ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 670
    Points : 1 169
    Points
    1 169
    Par défaut
    Bonjour,
    les regex entre autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Public Function adresse_mod(ByVal adresse As String) As String
     
            Dim modele As String = "(?<=(\())(R.|AV.|PL.)(.)+(?=(\)))"
            Dim m As Match = Regex.Match(adresse, modele)
     
            If m.Success Then
                Return m.ToString.Replace("R.", "Rue").Replace("AV.", "Avenue").Replace("PL.", "Place")
            End If
     
            Return "Pas d'occurence trouvée"
     
        End Function
    Le modèle de recherche est : "(?<=(\())(R.|AV.|PL.)(.)+(?=(\)))"
    (?=(\))) : recherche dans le texte une sous chaine qui est suivie d'une parenthèse fermente.
    C'est une pré-analyse positive.
    (?<=(\()) : recherche si cette sous chaine est précédée d'une parenthèse ouvrante.
    C'est une post-analyse positive.
    (R.|AV.|PL.)(.)+ : teste la chaine éventuellement trouvée. Elle doit commencer par R. ou AV. ou PL. impérativement et comporter ensuite un ou plusieurs caractères quelconques.
    NB. Pour utiliser ( ou ) au sens littéral, on les échappe avec le caractère \, car elles appartiennent aux caractères spéciaux utilisés par les Regex.

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

Discussions similaires

  1. [RegEx] Récupérer une chaine entre parenthèses
    Par deubelte dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2014, 19h50
  2. [XL-2007] Copier/coller vers Excel d'une chaine entre parenthèses
    Par alers dans le forum Excel
    Réponses: 5
    Dernier message: 10/06/2013, 12h56
  3. Extraire une chaine entre parenthèse
    Par flo73 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/10/2010, 12h14
  4. extraction d'une chaine de caractere ...
    Par nicolasghaz dans le forum VBScript
    Réponses: 7
    Dernier message: 31/10/2005, 18h53
  5. Extraction d'une chaine de caractères
    Par megane dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2004, 14h52

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