[API REGEX]

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bon, je viens demander votre aide car j’aimerais extraire grâce à l’api regex toutes les phrases qui sont après ces caractères ( voir photo) je ne trouve pas du tout et je sais pas si c’est possible de le faire, j’ai essayé plusieurs méthodes deja mais rien de concluant si quelqu’un à une idée ou une solution, merci d’avance, et bonne journée

PS : J’aimerais aussi savoir si c’est possible de faire :

ligne.startsWith("xxx") --> Les "xxx" correspondrait a un regex notamment le regex correspondant à l'image
image.png
image.png

Édité par Theo V

+0 -0

Tu peux écrire ta regex de manière à inclure toutes expressions commençant par "xxx" mais ne finissant pas forcément par ceci. Pour toute regex, si tu ajoutes un ^ en début d’expression, tu peux commander à ta regex de chercher en début de ligne. À l’inverse, tu peux lui indiquer avec un $ à la fin que tu veux chercher en fin de ligne et la combinaison des deux, que ta ligne doit correspondre à 100% à la regex.

Ainsi, ta regex "xxx" deviendra "^xxx".

Édité par BorisD

+0 -0
Auteur du sujet

J’avais un peu près compris ça, ce que je demande c’est quelle est la regex correspondant à l’image que j’ai envoyé c’est ce qui m’intéresse vraiment, parce que j’ai beau essayé pleins de combinaison, rien ne marche Merci de ta réponse en tout cas

Édité par Theo V

+0 -0
Auteur du sujet

J’ai décidé de faire plus simple, je m’explique dans les fichiers texte à ma dispositions il y ça :

  • Sailors aboard USS Carl Vinson prepare to man the rails as the ship arrives in Pearl Harbor.

Du coup j’ai essayé de faire la regex suivante : "[a-zA-Z]" mais elle ne marche absolument pas et je vois pas pourquoi donc si une personne à une solution ou une idée

public class Main {
        
    public static void main(String[] args) throws IOException {
        
        //Declaration des champs dans le tableau
        String photographer = "";
        String photo_url = "";
        String Taken_Date = "";
        String titre = "";
        String description = "";
        String tags = "";
        String ligne;
        String regex = "[a-zA-Z]";
        
        //Va créer un fichier qui sappelle Apollo_7.csv dans le répertoire qu'on lui donne
        CSVWriter writer = new CSVWriter(new FileWriter("E:\\Apollo_11.csv"));
        
        // Recuperation tous les fichiers d'un repertoire
            File repertoire = new File("E:\\53_Txt");
        
        // Et les mets dans un tableau
            File[] files = repertoire.listFiles();
        
        // Ici, on définit le nombre et le nom des colonnes présent dans le fichier.csv
            String[] titres = {"1_Index_INTERNE","2_Mission_PUBLIC","3_Reference_Nasa_avec_Titre_INTERNE","4_Reference_Nasa_INTERNE",
                    "5_Date_prise_de_vue/Traitement_de_l'image_PUBLIC","6_Date_de_traitement_de_l'image_PUBLIC",
                    "7_Reference_Galaxy_PUBLIC","8_Reference_Nasa_ou_FL/Galaxy_INTERNE","9_Reference_FL_INTERNE",
                    "10_Titre_PUBLIC","11_Description_PUBLIC",
                    "12_Wikipedia_Infos_about_PUBLIC","13_Mots_cles_PUBLIC",
                    "14_Taille_MB_PUBLIC","15_Width_PUBLIC","16_Height_PUBLIC","17_Depth_PUBLIC","18_Dpi_PUBLIC",
                    "19Format_PUBLIC","20_Orientation_PUBLIC","21_Focal_Length_PUBLIC","22_Aperture_PUBLIC","23_Exposure_PUBLIC",
                    "24_Sensitivity_PUBLIC","25_Manufacture_PUBLIC","26_Model_PUBLIC","27_User_Comment_INTERNE",
                    "ProprietairePublic","29_OPTION_1","30_OPTION_2","31_OPTION_3"};
            writer.writeNext(titres);
            
        // Boucle For permettant de parcourir le tableau
            for (File file : files) {
                String name_File = (file.getName() != null) ? file.getName().substring(0,file.getName().indexOf('.')) : "";
        // Permet d'obtenir le nom des fichiers dans le tableau
                System.out.println("\n"+name_File);
            
                
                
            try {   
        // Ces lignes de codes permettent d'ouvrir les fichiers texte et de pouvoir les lires
            InputStream ips = new FileInputStream(file);
            InputStreamReader ipsr = new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(ipsr);
            
            
            while ((ligne = br.readLine()) != null) {
            // Suite de condition permettant d'extraire des lignes grace a leurs debut
                if(ligne.startsWith("Photographer : ")) {
                    System.out.println(ligne);
                    photographer = ligne.substring(15);
                    
                }else if (ligne.startsWith("Photo URL")) {
                    System.out.println("Photo URL : " + ligne.substring(52,61));
                    photo_url = ligne.substring(52,61);
            
                }else if(ligne.startsWith("Taken Date")) {
                    System.out.println(ligne);
                    Taken_Date = ligne.substring(12);
                            
                }else if(ligne.startsWith(regex)) {
                    System.out.println("Titre : " + ligne);
                    titre = ligne.substring(0);
                    
                }else if (ligne.startsWith("Ap")) {
                    System.out.println("Description : " + ligne);
                    description = ligne.substring(0);
                                
                }else if(ligne.startsWith("N",1)) {
                    System.out.println("Tags : " + ligne.substring(0));
                    tags = ligne.substring(0);
            }
        }
                br.close();
        }catch (Exception e) {
            System.out.println(e.toString());
            }
        
        /////////////////////////Redirection des données vers un ficher de type cvs/////////////////////////
        
        //Ici on définit les valeurs de chaque colonne présente dans le fichier .csv
            /*String[] entree = {" "," "," ",titre,Taken_Date," "," ",photo_url," "," ",description," ",tags," ",
                    " "," "," "," "," "," "," "," "," "," "," "," "," ",photographer," "," "," "};
            writer.writeNext(entree);*/
        }   
        writer.close();
    }
}

Édité par Theo V

+0 -0
} else if(ligne.startsWith(regex)) {

La fonction String.startswith prend en paramètre un String et recherche strictement si la chaine commence par prefix. Ce n’est pas pour tester une regex ! Pour cela il faut utiliser la classe Pattern du package java.util.regex, plus précisément la méthode Pattern.matches et pour lui indiquer que la regex que tu lui fourni doit détecter si la chaîne commence par ta regex, tu dois ajouter '^' (accent circonflexe seul) devant ta regex ce qui produira :

String begin_regex = `^[a-zA-Z]`;

Remarque : Tu as pu voir que j’ai utilisé des accents graves seuls : c’est pour écrire des chaînes raw (litéralement crues) ce qui t’évite pour cette regex : \w+.\W*\, tu aies à écrire : "\\w+.\\W*\\", ce qui est beaucoup moins clair.

Je te laisse regarder (quelques lignes plus loin dans le lien) comment faire pour utiliser une regex pour optimiser grandement (génère une seule regex à la place de beaucoup si tu itères en utilisant la regex) avec Pattern.compile.

+0 -0
Auteur du sujet

Merci de ta réponse, mais ça ne marche toujours pas j’ai mis

String begin_regex = "^[a-zA-Z]";
et if(pattern.matches(begin_regex,ligne);
et aussi if(ligne.matches(begin_regex)

Pour la dernière ligne j’ai l’exception NullPointerException mais je comprend pas pourquoi il me sort cette exception J’ai pas compris pour tes accents graves seuls, en java ca peut pas marcher ça j’avais deja essayé, du coup si tu peux m’expliquer un peu et peut-etre régler le souci Je te remercie en tout cas Bonne fin de soirée à toi

Édité par Theo V

+0 -0

Pourrais-tu nous fournir le traceback exact pour que je puisse t’aider ?

Est-ce que tu as même regardé le lien que je t’ai envoyé ?

Premièrement, il faut importer le package, puis tu as écris pattern mais c’est la classe Pattern que tu utilises. De plus, tu as marqué regex alors que c’est begin_regex dans le code… :zorro:

+0 -0
Auteur du sujet

Je suis sur eclipse donc oui j’ai tout importé ca c’est sûr J’ai essayé

if(Pattern.matches(begin_regex,ligne)

Tu as comment le fichier texte en construit en quelques sortes et tu entend quoi par le traceback ? ( Désolé j’ai jamais entendu ce mot dans les études que je fais) Si c’est l’erreur ca me marque juste ça java.lang.nullPointerException image.png

Édité par Theo V

+0 -0
Auteur du sujet
public class Main {
        
    public static void main(String[] args) throws IOException {
        
        //Declaration des champs dans le tableau
        String photographer = "";
        String photo_url = "";
        String Taken_Date = "";
        String titre = "";
        String description = "";
        String tags = "";
        String ligne = null;
        String begin_regex = "^[a-zA-Z]";
        
        
        //Va créer un fichier qui sappelle Apollo_7.csv dans le répertoire qu'on lui donne
        CSVWriter writer = new CSVWriter(new FileWriter("E:\\Apollo_11.csv"));
        
        // Recuperation tous les fichiers d'un repertoire
            File repertoire = new File("E:\\53_Txt");
        
        // Et les mets dans un tableau
            File[] files = repertoire.listFiles();
        
        // Ici, on définit le nombre et le nom des colonnes présent dans le fichier.csv
            String[] titres = {"1_Index_INTERNE","2_Mission_PUBLIC","3_Reference_Nasa_avec_Titre_INTERNE","4_Reference_Nasa_INTERNE",
                    "5_Date_prise_de_vue/Traitement_de_l'image_PUBLIC","6_Date_de_traitement_de_l'image_PUBLIC",
                    "7_Reference_Galaxy_PUBLIC","8_Reference_Nasa_ou_FL/Galaxy_INTERNE","9_Reference_FL_INTERNE",
                    "10_Titre_PUBLIC","11_Description_PUBLIC",
                    "12_Wikipedia_Infos_about_PUBLIC","13_Mots_cles_PUBLIC",
                    "14_Taille_MB_PUBLIC","15_Width_PUBLIC","16_Height_PUBLIC","17_Depth_PUBLIC","18_Dpi_PUBLIC",
                    "19Format_PUBLIC","20_Orientation_PUBLIC","21_Focal_Length_PUBLIC","22_Aperture_PUBLIC","23_Exposure_PUBLIC",
                    "24_Sensitivity_PUBLIC","25_Manufacture_PUBLIC","26_Model_PUBLIC","27_User_Comment_INTERNE",
                    "ProprietairePublic","29_OPTION_1","30_OPTION_2","31_OPTION_3"};
            writer.writeNext(titres);
            
        // Boucle For permettant de parcourir le tableau
            for (File file : files) {
                String name_File = (file.getName() != null) ? file.getName().substring(0,file.getName().indexOf('.')) : "";
        // Permet d'obtenir le nom des fichiers dans le tableau
                System.out.println("\n"+name_File);
            
            try {
        // Ces lignes de codes permettent d'ouvrir les fichiers texte et de pouvoir les lires
            InputStream ips = new FileInputStream(file);
            InputStreamReader ipsr = new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(ipsr);
            Pattern p = Pattern.compile(begin_regex);
            
            while ((ligne = br.readLine()) != null) {
                    Matcher m = p.matcher(ligne);
                    boolean b = m.matches();
                    System.out.println(b);
            // Suite de condition permettant d'extraire des lignes grace a leurs debut
                if(ligne.startsWith("Photographer : ")) {
                    System.out.println(ligne);
                    photographer = ligne.substring(15);
                    
                }else if (ligne.startsWith("Photo URL")) {
                    System.out.println("Photo URL : " + ligne.substring(52,61));
                    photo_url = ligne.substring(52,61);
            
                }else if(ligne.startsWith("Taken Date")) {
                    System.out.println(ligne);
                    Taken_Date = ligne.substring(12);
                            
                }else if(b == true) {
                    System.out.println("Titre : " + ligne);
                    titre = ligne.substring(0);
                    
                }else if (ligne.startsWith("Ap")) {
                    System.out.println("Description : " + ligne);
                    description = ligne.substring(0);
                                
                }else if(ligne.startsWith("N",1)) {
                    System.out.println("Tags : " + ligne.substring(0));
                    tags = ligne.substring(0);
            }
        }
                br.close();
        }catch (Exception e) {
            System.out.println(e.toString());
            }
        
        /////////////////////////Redirection des données vers un ficher de type cvs/////////////////////////
        
        //Ici on définit les valeurs de chaque colonne présente dans le fichier .csv
            /*String[] entree = {" "," "," ",titre,Taken_Date," "," ",photo_url," "," ",description," ",tags," ",
                    " "," "," "," "," "," "," "," "," "," "," "," "," ",photographer," "," "," "};
            writer.writeNext(entree);*/
        }   
        writer.close();
    }
}

J’ai testé ça mais ca ne marche non plus, je sais plus quoi tenter pour que ça marche, à chaque fois il repere pas la regex dans le document texte

+0 -0

J’essaie de me procurer une JVM et j’essaie pour te répondre.

Edit: en fait le Traceback ce n’est pas exactement comme une erreur que tu verrais sur une ligne. Ex : error: file not found. Le traceback ressemble plus à ça :

Error: java.lang.NullPointerException at line 12 of bidulle.java in function foo()
- At line 45 of bar.java in Bar.bar()
- In function Main.main()

Pour résumer, c’est le chemin que fait ton erreur avant d’être catch ou de revenir à la fonction main(), faisant planter inévitablement ton programme si tu ne l’attrapes pas ^^

Édité par Vanadiae

+0 -0
Auteur du sujet

Le system.out.println(b) me retourne faux quelques soit le motif que je met, d’accord écoute je te remercie d’essayer de m’aider et vais essayer de chercher encore de mon côté même si j’arrive au bout de mes solutions Edit : et comment tu as ça ?

Édité par Theo V

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte