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

avec Java Discussion :

supprimer chaine de caractères avec sélection par expression régulière


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut supprimer chaine de caractères avec sélection par expression régulière
    Bonsoir,

    Je souhaite supprimer une chaine de caractères où la partie centrale de la chaine n'est jamais la même.
    exemple:
    j'ai cela:
    <text top="1034" left="685" width="130" height="12" font="0">COMPANY Inspector </text>
    <text top="1065" left="93" width="40" height="12" font="0">Name </text>
    <text top="1096" left="93" width="62" height="12" font="0">Signature </text>
    <text top="1126" left="93" width="78" height="12" font="0">Date &amp; Time </text>
    <text top="1200" left="46" width="110" height="32" font="10">INDRA</text>
    <text top="1223" left="60" width="89" height="15" font="11">03-AUG-2016</text>

    je veux obtenir se qui suit:
    <text>COMPANY Inspector </text>
    <text>Name </text>
    <text>Signature </text>
    <text>Date &amp; Time </text>
    <text>INDRA</text>
    <text>03-AUG-2016</text>

    Je mets ci-dessous une partie du code que j'ai déjà réalisé: je cherche a résoudre mon problème via la classe Pattern mais je ne parviens pas à utiliser les expression régulières correctement

    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
    Pattern p = Pattern.compile("<text.*");
     
        try //controle sur l'ouverture du fichier à lire
          {
    	lecteurAvecBuffer = new BufferedReader //instanciation de la classe BufferredReader
    	  (new FileReader(argv[0]));
          }
        catch(FileNotFoundException exc) //si l'expretion capture est vrai alors l'instruction du bloc catch est exécuté
          {
    	System.out.println("Erreur d'ouverture");
          }
     
        i=0; // initialisation de la variable
     
        while ((ligne = lecteurAvecBuffer.readLine())!=null) //boucle permettant la scrutation du fichier à épurer
        {
     
        	boolean b = ((Pattern.matches("(.*)font=\"\\d{2}\"> </text>",ligne)) || (Pattern.matches("(.*)font=\"\\d\"> </text>",ligne))); // condition permettant de retirer toutes les lignes où il n'y a pas de text
     
        	if (ligne.contains(valeur2))//ici je déterminé le début de la page que je souhaite extraire
        	{
        		i=1;
        	}
        	if (ligne.compareTo(valeur3)==0 && i==1) //ici je déterminé la fin de la page que je souhaite extraire
        	{
        		i=0;
         	}
            if  ( ((ligne.compareTo(valeur1))!=0) && (i == 1) && !b) //condition à remplir pour que la courant ligne lu soit selectionnée
            {		
            	ligne = ligne.replace(p.pattern(), "");
            	System.out.println(ligne);
            } //fin du if
        } //fin du while
    Merci pour votre coup de main.

    Olivier

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux simplement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pattern pattern = Pattern.compile("(\\s\\w+=\"\\d+\")+");
     
    		final Matcher matcher = pattern.matcher(input);
    		final StringBuffer sb = new StringBuffer();
    		while( matcher.find() ) {
    			matcher.appendReplacement(sb, "");
    		}
    		matcher.appendTail(sb);
    		String output = sb.toString();
    Explication du pattern :
    • \\s une espace
    • \\w+ : une série de lettres ou chiffre, au moins 1
    • = un égal
    • \" un guillemet
    • \\d+ une série de chiffres (au moins 1)
    • \" un guillemet

    ()+ pour dire qu'on peut en avoir de 1 à plusieurs

    Tu peux faire Pattern pattern = Pattern.compile("(?<=<text)(\\s\\w+=\"\\d+\")+(?=>)"); pour dire que tu veux supprimer les xxx="..." seulement dans <text > :
    • (?<=<text) qui est précédé par <text
    • (?=>) qui est suvi de >
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Un Grand Merci à toi joel.drigo. Je tournais en rond depuis deux jours et sans ton aide cela aurait duré encore quelques jours.
    Cela marche exactement comment je le souhaite.

    Petit complément pour les futurs lecteurs de ce post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    final Matcher matcher = pattern.matcher(input);
    ici "input" correspond à la ligne que je souhaite "nettoyer".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String output = sb.toString();
    ici "output" correspond à la ligne une fois "nettoyer"

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

Discussions similaires

  1. Supprimer chaine de caractères indefinie avec PHP
    Par Pierrot11 dans le forum Langage
    Réponses: 4
    Dernier message: 14/01/2014, 15h51
  2. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  3. Reception chaine de caractère avec recvfrom()
    Par innosang dans le forum C
    Réponses: 5
    Dernier message: 31/12/2005, 14h51
  4. Lecture d'une chaine de caractère avec fgets
    Par mayoouketchup dans le forum Langage
    Réponses: 9
    Dernier message: 22/12/2005, 16h17
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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