Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    REGEX: estrazione dati da espressione

    Buonasera a tutti

    Sto scrivendo un programmino che si collega alla pagina degli "Eventi del Giorno" del sito dell'università e la scarica. Da questa pagina voglio poi estrarre le informazioni relative alle aule ed agli orari in cui sono occupate (per lezioni/esami). Ho analizzato la struttura della pagina ed ho capito come isolare i dati che mi interessano, in pratica ogni riga della tabella è formata da 3 celle, così:

    codice:
    ...
    <tr>
      <td class="Content_Chiaro">INSEGNAMENTO</td>
      <td class="Content_Chiaro">ORARIO</td>
      <td class="Content_Chiaro">AULA</td>
    </tr>
    ...
    Per estrarre i dati perciò ho scritto questa espressione regolare:

    codice:
    <td class=\"Content_Chiaro\">.*</td>
    (che dovrebbe suonare come "un qualsiasi numero di caratteri compreso tra <td class="Content_Chiaro"> e </td>").

    Per funzionare funziona, ma la chiamata a matcher.group() mi restituisce tutta la riga relativa, non solo il contenuto della cella (penso sia normale, giusto?). Ottengo quindi una serie di stringhe così:

    codice:
    <td class="Content_Chiaro">Algebra</td>
    <td class="Content_Chiaro">12.30 - 13.30</td>
    <td class="Content_Chiaro">Gino Tessari</td>
    <td class="Content_Chiaro">Programmazione</td>
    <td class="Content_Chiaro">9.30 - 12.30</td>
    <td class="Content_Chiaro">Laboratorio Delta</td>
    <td class="Content_Chiaro">Ricerca Operativa</td>
    <td class="Content_Chiaro">11.30 - 13.30</td>
    <td class="Content_Chiaro">M</td>
    
    ecc.
    Questo mi costringe ad usare i metodi di String per liberarmi dei pezzi "in più". Ecco quindi la mia domanda: c'è modo, direttamente con la regex, di ottenere solo ciò che sta in mezzo a <td...> </td>? Mi sfugge qualcosa? :master:

    Intanto grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: REGEX: estrazione dati da espressione

    Originariamente inviato da Alex'87
    Per estrarre i dati perciò ho scritto questa espressione regolare:

    codice:
    <td class=\"Content_Chiaro\">.*</td>
    ma la chiamata a matcher.group() mi restituisce tutta la riga relativa, non solo il contenuto della cella (penso sia normale, giusto?).
    È normale ciò che hai ottenuto fino ad adesso perché solo * è un quantificatore "greedy" (ingordo) ovvero cerca di catturare il più possibile. Usa il quantificatore *? che invece è "reluctant" (riluttante) e cerca di catturare il meno possibile.

    Quindi nel tuo caso "....>.*?<...."
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: REGEX: estrazione dati da espressione

    Originariamente inviato da andbin
    È normale ciò che hai ottenuto fino ad adesso perché solo * è un quantificatore "greedy" (ingordo) ovvero cerca di catturare il più possibile. Usa il quantificatore *? che invece è "reluctant" (riluttante) e cerca di catturare il meno possibile.

    Quindi nel tuo caso "....>.*?<...."
    Grazie per la risposta! Ho provato ora (ieri sera la tabella era vuota) ma l'output resta uguale :master:

    Questo è il codice, mi è sfuggito qualcos'altro?
    codice:
    String input = downloadCode(...);
    String regex = "<td class=\"Content_Chiaro\">.*?</td>";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    
    ...
    
    while (matcher.find()) {
    	String temp = matcher.group();
    	System.out.println(temp);
    
            ...
    }
    ...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: REGEX: estrazione dati da espressione

    Originariamente inviato da Alex'87
    ma l'output resta uguale :master:
    Sì, ti spiego meglio. Solo con .* come ho detto prima è "greedy" ovvero cerca di catturare il più possibile. In effetti non ho fatto attenzione subito all'esempio che hai postato ma da quello che si vede, ogni cella è su una riga diversa. Il '.' per default non fa il match con il newline (a meno che usi il flag DOTALL) e in questo caso specifico usare .* o .*? non cambia nulla.

    Se avessi più celle <td> sulla stessa riga .... sì, cambia!! Perché .* cattura il più possibile (quindi se hai 2 celle sulla riga: <td>...</td><td>....</td> la regex cattura tutto questo) mentre con .*? solo 1 cella cioè il minimo possibile.
    In ogni caso ti conviene usare .*? perché visto che quella pagina non l'hai fatta tu, se un giorno decidono di cambiare la struttura e mettere tutte le <td> sulla stessa riga, con .* combini macelli.

    Detto questo, capisco (solo ora ... già .. non l'avevo letto bene ieri ) che vuoi catturare in modo particolare solo il contenuto che c'è nel <td>. In questo caso basta che metti un "gruppo" cioè qualcosa tra parentesi ....(.*?)..... e poi usi group(1) per prenderlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Grazie mille per la spiegazione, ora funziona perfettamente!!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.