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 :

regex pour supprimer une ligne commençant par une lettre


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut regex pour supprimer une ligne commençant par une lettre
    Bonjour,

    je suis en train d'essayer un code en regex pour effacer des lignes d'un fichier texte qui commencerait par s ou 2, donc voici mon bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] paras = Pattern.compile("(?i)(T.*)[\\s]").split(inputText);
    ce code en fait efface seulement les lettes T sur tout le contenu de mon texte.
    Quelle expression dois-je utiliser pour dire que la ligne qui commence par T doit être ssupprimer? merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Faut décomposer:

    La ligne, donc ton string et multiligne et ton expression tiendra compte des lignes, il faut donc le flag multiline (?m)

    Donc, elle commence
    ^
    par T
    T

    et ben sûr, elle fini
    $
    et il y a "n'importe quoi" entre les deux
    .*

    Donc
    (?m)^T.*$
    Ensuite; faut toutes les virer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String nouveauTest = inputText.replaceAll("(?m)^T.*$","");
    Et ca devrait, je pense etre bon (pas testé)

  3. #3
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    Merci Tchize mais cela ne fonctionne pas du tout.
    Je continue à rechercher et je laisse ouvert le sujet.
    Tout commentaire sera bienvenu.

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ssmano Voir le message
    Merci Tchize mais cela ne fonctionne pas du tout.
    Pourriez vous être plus précis (résultat obtenu, vs résultat attendu, et la chaine utilisée pour le test)

  5. #5
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    ok voici le code que j'utilise.
    J'ai un fichier texte qui contient des lignes et je voudrai supprimer des lignes commençant par par ex S


    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
    import java.util.regex.*;
    import java.io.*;
     
    public class ReadLines
    {
      public static void main(String[] args) throws IOException,InterruptedException
      {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter file name: ");
        String filename = in.readLine();
        File file = new File(filename);
        if(!filename.endsWith(".txt")){
          System.out.println("File not in text format.");
          System.exit(0);
        }
        else if(!file.exists()){
          System.out.println("File not found.");
          System.exit(0);
        }
     
        FileInputStream fstream = new FileInputStream(filename);
        DataInputStream ds = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(ds));
        Pattern p;
        Matcher m;
        String strLine;
        String inputText = "";
        while((strLine = br.readLine()) != null) inputText = inputText + strLine + "\n";
     
        //String[] paras = Pattern.compile("\".*\"").split(inputText);
        //String[] paras = Pattern.compile("^I.[ae]").split(inputText);
        String[] paras = Pattern.compile("(?m)^T.*$").split(inputText);
       String nouveauTest = inputText.replaceAll("(?m)^T.*$","");
     
     
        Thread th = new Thread();
        for(int i=0; i<=paras.length-1; i++){
          System.out.println(paras[i]);
     
     
          th.sleep(1500);
        }
      }
    }

    quand j'essai ce code, il m'affiche tout le texte sans rien supprimer.

    Merci

  6. #6
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    Par défaut
    Pour S ou T? En tout cas, j'aurais essayé ça ("S" ici ^^):

    blabla.replaceAll("^S.*?\n","");

    PS: la casse a une importance au passage!

  7. #7
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    Merci mais en fait il me vire tous les T dans tout le contenu du texte.
    or je voulais qu'il vire les lignes commençant par T.

    Pas de S dans tout cela, le S est un $

    merci

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par ssmano Voir le message
    Bonjour,

    je suis en train d'essayer un code en regex pour effacer des lignes d'un fichier texte qui commencerait par s ou 2,
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pourriez vous donner un exemple concret qui reproduit votre problème? Parce qu'ici, cette regexp fonctionne très bien!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import java.util.regex.*;
     
     
    public class Test {
     
    public static void main(String[] argv){
        String inputText = "Bonjour\nTout le monde\nLa ligne au dessus a disparu et celle en dessous aussi!\nTiens, c'est celle ci, à propos ;)";
    System.out.println(inputText.replaceAll("(?m)^T.*$",""));
       }
    }

  10. #10
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    OK Voici le texte sur lequel je voudrai supprimer tout ce qui est entre T et S
    Donc les 8 premières lignes devraient être supprimées.

    exemple concret par rapport à ma toute première question.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    This is the best way to learn what they really do AX11
    It is my hope that you will run some of these code (tuc) 2011/11/14 03:45:00
    But there is some funny business here in the ignore (tuc) 2011/11/14 04:00:00
    FDR params
    Ordinate x
    Ordinate y
    YYYY/MM/DD
    There is leaks
    Make it happen to disk c:
    And copy it to disk f:
    Merci Tchize

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    comme je vous l'ai dit, le code fonctionne donc montrez nous votre code qui ne supprime que la premièer lettre et ce qui en sort :/

  12. #12
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    ok le code est celui-ci:



    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
    import java.util.regex.*;
    import java.io.*;
     
    public class ReadLines
    {
      public static void main(String[] args) throws IOException,InterruptedException
      {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter file name: ");
        String filename = in.readLine();
        File file = new File(filename);
        if(!filename.endsWith(".txt")){
          System.out.println("File not in text format.");
          System.exit(0);
        }
        else if(!file.exists()){
          System.out.println("File not found.");
          System.exit(0);
        }
     
        FileInputStream fstream = new FileInputStream(filename);
        DataInputStream ds = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(ds));
        Pattern p;
        Matcher m;
        String strLine;
        String inputText = "";
        while((strLine = br.readLine()) != null) inputText = inputText + strLine + "\n";
     
     
     
        String[] paras = Pattern.compile("(?m)^[T-t]|[S-s]|[D-d].*$").split(inputText);
       String nouveauTest = inputText.replaceAll("^[T-t]|[S-s]|[D-d].*?\r\n","");
     
     
        Thread th = new Thread();
        for(int i=0; i<=paras.length-1; i++){
          System.out.println(paras[i]);
     
     
          th.sleep(1500);
        }
      }
    }

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2011, 21h15
  2. [RegEx] Suppression d'une ligne conditionnée par une expression
    Par supernova dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2010, 10h52
  3. comment remplacer une boucle PHP par une ligne MySQL ?
    Par dsant dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/09/2010, 19h04
  4. [XL-2007] supprimer des lignes commençant par un mot précis.
    Par bedoch dans le forum Excel
    Réponses: 4
    Dernier message: 03/08/2010, 10h59
  5. Réponses: 2
    Dernier message: 06/03/2009, 08h32

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