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

Java Discussion :

REGEX Matcher un mot s'il n'appartient pas à une liste donnée


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Informatique Décisionnelle
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique Décisionnelle

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut REGEX Matcher un mot s'il n'appartient pas à une liste donnée
    Bonjour à tous,

    Le but est de déclarer une liste de mot dans une variable puis dans une expression régulière de réussir à capturer un mot s'il n'appartient pas à la liste.
    Le but serait de ne pas avoir à créer une liste "négative" (une liste de ^mot).

    Je vais donner un exemple ce sera plus simple.
    (l'exemple n'est pas du tout écrit en langage Java, désolé mais mon cas est en fait une utilisation de RegExp sur des données HTML et j'ai un peu de mal à tout reproduire ici; disons que le pattern me suffit, je me débrouillerai pour l'implémenter dans ma structure).

    Genre=boy|girl

    Phrases en entrée
    1) Jack is a boy
    2) Jack is a dog

    Je cherche un pattern tel qu'on récupère ce qu'il y a après "a" dans le cas où ce mot n'est pas dans la liste "Genre".

    Si le mot doit être dans la liste genre ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regEx="Jack is a (\v{Genre})
    Pourrait-on faire un "^\v{Genre}" ou bien faut il faire une soustraction entre la liste de tous les mots, soit \w+, et la liste "Genre" ?

    Merci à ceux qui ont lu, dites moi s'il faut que j’éclaircisse, je sais que c'est brouillon et abstrait...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Les RegExp, tel qu'elles sont implémentées en Java, ne te permettront pas de faire ce genre de chose.

    Si le mot que tu veux extraire se trouve dans une expression bien définie, tu peux déjà commencer par extraire ce mot avec la fonction Matcher;group(). Dans ton cas, l'expression régulière ressemblerait à quelque chose comme ça : "Jack is a \\w+"

    Ensuite, tu peux utiliser un HashSet qui aura été rempli avec les mots de ta liste blanche et que tu peux interroger pour savoir si le mot est connu.

    C'est une solution générale, si tu veux des détails, n'hésite pas à demander.

  3. #3
    Candidat au Club
    Homme Profil pro
    Informatique Décisionnelle
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique Décisionnelle

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut Pourtant je l'ai fait
    Mon expression régulière Java \v{genre} fonctionne bien pourtant.
    C'est peut être une spécificité de l'appli JAva que j'utilise; je ne suis pas allé voir dans le détail comment les regexp étaient traitées (elles sont déclarées dans un fichier XML).

    Merci pour ta réponse, je ne pense pas que de solution évidente du type ^\v{var_liste} soit possible. Je posterais mes avancements dans le cas où je trouve une solution ou de nouveaux éléments.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Je ne suis pas sur de comprendre ce que signifie ton \v{Genre}, mais j'ai l'impression que ce que tu veux faire est faisable assez facilement en utilisant les lookafter. Les lookafter sont une vérification positive : (?=ExpressionAVerifier) ou négative : (?!ExpressionAVerifier) qui ne consomme pas de caractère.

    Par exemple, pour prendre ce qui est après "Jack is a" si ce n'est ni "boy" ni "girl" : Jack is a (?!boy|girl)(.*)

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    en meme temps, si la liste fait plus de trois mot, l'expression régulière va vite devenir imbuvable et dure à maintenir. Êtes vous sur d'avoir besoin d'un expression régulière compliquée plutôt que de deux/trois lignes de code supplémentaires?

Discussions similaires

  1. [XL-2007] NB.SI n'appartient pas à la liste
    Par CamilleHentille dans le forum Excel
    Réponses: 5
    Dernier message: 26/12/2013, 13h52
  2. Macro pour écrire un mot d'une liste donnée
    Par oc_alex86 dans le forum Programmation (La)TeX avancée
    Réponses: 2
    Dernier message: 10/12/2011, 15h55
  3. [SQL-Server] verifier si une partie du text saisi appartient a une liste des valeurs
    Par manel ingenieur dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/12/2010, 10h47
  4. [AJAX] Mots pré-écrits au lieu d'une liste
    Par jiojioforever dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/03/2007, 16h21
  5. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/05/2004, 13h33

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