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

Python Discussion :

regex un motif


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut regex un motif
    Bonjour,

    Je cherche à matcher dans le fichier JSON ci-dessous:

    "entityUid":"xxxxxxx","name":"Partition
    / - / free","metricUid":"xxxxxx","triggers":[{"uid":"xxxxxxx"
    le nom Partition / - / free à partir de "name":"Partition / - / free"
    j'ai déja définit une regex: Pattern.compile("\"name\":\"(.+?)\"") malheureusement je sais pas comment inclure le retour chariot qui coupe le nom en 2

    svp?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si vous lisez un fichier json, le plus simple serait de commencer par le dé-sérialiser avec le module json qui vient en standard avec Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut
    Ben en fait j'ai juste besoin de m'entrainer a utiliser les expressions régulières et j'aimerai savoir comment le faire juste de cette facon?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kali38 Voir le message
    Ben en fait j'ai juste besoin de m'entrainer a utiliser les expressions régulières et j'aimerai savoir comment le faire juste de cette facon?
    Si la question est "je sais pas comment inclure le retour chariot qui coupe le nom en 2", faites un petit exemple de code montrant ce que vous n'arrivez pas à faire. Si on essaie de faire çà bourrin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> s = """aaa
    ... bbb"""
    >>> re.match(r'aaa\nbbb', s)
    <_sre.SRE_Match object; span=(0, 7), match='aaa\nbbb'>
    >>>
    çà fonctionne mais peu probable que çà aide.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut
    j'ai donner un exemple plus haut

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Il faut ajouter le flag re.DOTALL (ou re.S) pour que '.' corresponde aussi aux fins de ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> import re
    >>> txt = '''
    ... "entityUid":"xxxxxxx","name":"Partition
    ... / - / free","metricUid":"xxxxxx","triggers":[{"uid":"xxxxxxx"'''
    >>> txt
    '\n"entityUid":"xxxxxxx","name":"Partition\n/ - / free","metricUid":"xxxxxx","triggers":[{"uid":"xxxxxxx"'
    >>> m = re.search(r'"name":"[^"]*"', txt, re.S)
    >>> m.group(0)
    '"name":"Partition\n/ - / free"'
    >>> print(m.group(0))
    "name":"Partition
    / - / free"
    >>>

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut
    merci mais j'ai encore un prb si je veux tous mettre entre double quote de la sorte Pattern.compile("\"name\"/\s*/:"([^"]*)"") ca ne marche pas, qu'est ce qui ne va pas avec mon expression?

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Citation Envoyé par kali38 Voir le message
    merci mais j'ai encore un prb si je veux tous mettre entre double quote de la sorte Pattern.compile("\"name\"/\s*/:"([^"]*)"") ca ne marche pas, qu'est ce qui ne va pas avec mon expression?
    C'est vraiment se prendre la tête pour pas grand chose. Il faut dans ce cas échapper tous les " à l'intérieur de la chaîne :

Discussions similaires

  1. RegEx avec motif récursif
    Par Bacube dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/05/2012, 21h23
  2. [Regex] besoin d'aide sur des motifs
    Par Oluha dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2005, 11h23
  3. [Regex]Répurer plusieurs motifs
    Par gege2061 dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2005, 15h56
  4. [RegEx] mon motif de regex ne passe pas
    Par hansaplast dans le forum Langage
    Réponses: 31
    Dernier message: 19/10/2005, 11h20
  5. [Regex] Plusieurs motifs
    Par sissi_l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/06/2004, 14h15

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