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

Développement Windows Discussion :

Un regex qui fonctionne sur les testeurs en ligne, mais pas dans mon code


Sujet :

Développement Windows

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut Un regex qui fonctionne sur les testeurs en ligne, mais pas dans mon code
    Salut à tous,

    J'ai un soucis avec un regex qui marche parfaitement dans les simulateurs regex .net (http://regexhero.net/tester/) mais qui ne lève aucun match lorsqu'il est exécuté.

    Je vous donne le regex, et un exemple de contenu. Le contenu est issu du Wiktionnaire, j'essaie d'automatiser l'extraction d'info dans une page. Concrètement, je veux extraire toutes les sections commençant par === {{

    Exemple sans le contenu de la section:
    === {{S|nom|en}} ===

    Le regex:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim GrammarTagExtractor As Regex = New Regex("{{S\|([^}]*?)}} ===?[^=](.*?)((?<!==)===?[^=]|$)", RegexOptions.Compiled And RegexOptions.Singleline)

    L'exemple de contenu
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    == {{langue|fr}} ==
     
    === {{S|étymologie}} ===
    : {{siècle|XX}} Du {{étyl|ja|fr|漫画|manga|dessin sans but}}.
     
    === {{S|nom|fr}} ===
    {{fr-rég|mɑ̃.ɡa}}
    '''manga''' {{pron|mɑ̃.ɡa|fr}} {{m}}
    # {{littérature|fr}} [[bande dessinée|Bande dessinée]] [[japonais]]e, souvent en noir et blanc.
    #* ''Au pays du Soleil-Levant, les '''mangas''' sont bien plus importants que les BD ne peuvent l’être en France.''
    # Style, stéréotypes et règles implicites de la bande dessinée japonaise.
    #* ''Certaines caractéristiques du '''manga''' proviennent de l’influence des films de Walt Disney sur Osamu Tezuka.''
    # Dessin animé japonais. [[anime#fr|Anime]].
    #* ''Hier soir, juste au moment où j’allais me coucher, je suis tombée sur un programme télévisé, un '''manga''' plus précisément qui m’a emmené loin de mes tracas du quotidien.'' {{source|Carole Luna, ''Témoignage d’une femme Ã* bout de force'', 2008}}
     
    ===== {{S|note}} =====
    : Le mot ''manga'' a aussi été considéré comme féminin, mais l’usage tend Ã* préférer le masculin.
     
    ==== {{S|dérivés}} ====
    * [[mangaka]]
     
    ==== {{S|hyperonymes}} ====
    * [[bande dessinée]]
     
    ==== {{S|hyponymes}} ====
    * [[josei‎]] {{term|pour femme}}
    * [[redikomi]] {{term|pour femme}}
    * [[seinen]] {{term|pour homme}}
    * [[shōjo]] {{term|pour fille}}
    * [[shōnen]] {{term|pour garçon}}
     
    ==== {{S|traductions}} ====
    {{trad-début|Bande dessinée japonaise}}
    * {{T|en}} : {{trad+|en|manga}}
    * {{T|ko}} : {{trad+|ko|만화|tr=manhwa}}
    * {{T|eo}} : {{trad-|eo|mangao}}
    * {{T|ja}} : {{trad+|ja|漫画|tr=manga}}
    * {{T|sv}} : {{trad+|sv|manga}}
    {{trad-fin}}
     
    === {{S|prononciation}} ===
    * {{pron-rég|lang=fr|France|mɑ̃.ɡa|fr}}
    * {{pron-rég|lang=fr|Canada {{standard|nocat=1}}|maŋ.ɡa|fr}}
    * {{pron-rég|lang=fr|Canada {{popu|nocat=1}}|maŋ.ɡɔ|fr}}
     
    === {{S|anagrammes}} ===
    * [[magna]]
     
    === {{S|voir aussi}} ===
    * {{WP}}
     
    == {{langue|en}} ==
     
    === {{S|étymologie}} ===
    : Du {{étyl|ja|en|漫画|manga}}.
     
    === {{S|nom|en}} ===
    {{en-nom-rég|ˈmæŋ.ɡə}}
    '''manga''' {{pron|ˈmæŋ.ɡə|en}}
    # [[manga#fr|Manga]].
     
    == {{langue|es}} ==
     
    === {{S|étymologie}} ===
    : ''(Nom commun 1)'' Du {{étyl|la|es|manica}}.
    : ''(Nom commun 2)'' Du {{étyl|ja|es|漫画|manga}}.
     
    === {{S|nom|es|num=1}} ===
    {{es-reg-voy|ˈmaŋ.ɡa}}
    '''manga''' {{pron|ˈmaŋ.ɡa|es}} {{f}}
    # [[manche|Manche]].
     
    === {{S|nom|es|num=2}} ===
    '''manga''' {{pron|ˈmaŋ.ɡa|es}} {{f}}
    # [[#fr|Manga]].
     
    == {{langue|pap}} ==
     
    === {{S|étymologie}} ===
    : Du {{étyl|la|pap|manica||manche d’un vêtement}}.
     
    === {{S|nom|pap}} ===
    '''manga''' {{pron||pap}} {{f}}
    # [[rocher|Rocher]].
    # [[manche|Manche]].
     
    == {{langue|pt}} ==
     
    === {{S|étymologie}} ===
    : ''(Nom commun 1)'' Du {{étyl|la|pt|manica}}.
    : ''(Nom commun 2)'' Du {{étyl|ms|pt|mangga}}.
     
    === {{S|nom|pt|num=1}} ===
    {{pt-rég|}}
    '''manga''' {{pron||pt}} {{f}}
    # {{vêtement|pt}} [[manche#fr|Manche]].
    J'ai 14 matches dans le testeur, et aucun dans mon code. Je ne pige vraiment pas où est le problème. Est-ce que quelqu'un a une idée?

    EDIT: j'ai utilisé 3 testeurs différents. Celui-ci me renvoie une erreur mais sans explication: http://www.regexplanet.com/advanced/dotnet/index.html

  2. #2
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut


    Je prends tout ce qui peux m'aider. Si quelqu'un a un autre moyen de l'écrire (par exple sans lookbehind) ou une idée de piste à suivre pour contourner le problème, je suis preneur

    Merci par avance

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    J'ai fait une autre version du regex qui marche online mais pas dans mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((?<=(\n))=== {{)(.*?)((\n)((?=(== {{))|(?=(=== {{)))|$)
    Quelques questions:

    - Y a t il une limitation au nombre de regex (compilés ou non) utilisables en simultané(j'en ai une vingtaine)?
    - Pour ce type de tâche, est-ce qu'il serait plus pertinent de parser chaque char de ma string à la place du regex (oui j'en suis là )
    - Il y a des limitations au nombre de lookbehind et lookahead qu'on peut utiliser dans un même regex?

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je pense que le problème vient de l'opérateur And que tu as mis à la place de Or pour les RegexOptions ce qui fait que le mode Singleline n'est pas pris en compte et donc .*? ne passe pas les LF.

    Maintenant tu dois pouvoir améliorer les performances en utilisant:

    À tester.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Super, merci pour cette réponse. Ca marche parfaitement maintenant

    Sujet clos.

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

Discussions similaires

  1. Erreur sur les listes en débug mais pas en prod.
    Par phfle1 dans le forum VB.NET
    Réponses: 8
    Dernier message: 29/08/2008, 22h52
  2. Réponses: 3
    Dernier message: 30/07/2008, 08h51
  3. Réponses: 2
    Dernier message: 25/03/2008, 13h30
  4. Requête fonctionnant sur une version 4.1 mais pas 4.0
    Par DreammyKetty dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/11/2007, 22h31

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