Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ricerca algoritmo

  1. #1

    Ricerca algoritmo

    Salve. Qualcuno saprebbe dirmi come fare ad estrarre il nome di ogni provincia e la sua rispettiva abbreviazione da questa stringa:

    "<option value="AG">Agrigento - AG</option><option value="AL">Alessandria - AL</option><option value="AN">Ancona - AN</option>"

    ?

  2. #2
    Ciao Dreamer89,

    usa le regex di java. Servono proprio per il tuo scopo.

    java.util.regex

    L'alternativa è usare un parser XML, però è come usare una bomba atomica per distruggere un palazzo xD
    ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    105
    Usa l xml parser, magari in seguito ti servira estrarre altre info, e per la bomba tranquillo e gratuita.

  4. #4
    Sto pensando che le espressioni regolari siano una soluzione più "leggera". Ma girando su internet trovo solo guide che spiegano come fare a specificare se una stringa appartiene o no ad una forma voluta... ma non riesco a trovare una guida che mi spieghi come fare ad "estrapolare" stringhe da una stringa più grande.
    Non c'è qualcuno che potrebbe farmi un esempio con il mio problema?

  5. #5
    codice:
            Pattern p = Pattern.compile("</option>");
            String[] trovati = p.split("<option value=\"AG\">Agrigento - AG</option><option value=\"AL\">Alessandria - AL</option><option value=\"AN\">Ancona - AN</option>");
            Pattern p2 = Pattern.compile("<option value=\"(\\w\\w)\">(.+?) - (\\w\\w)");
            for (int i = 0; i < trovati.length; i++) {
                Matcher singola = p2.matcher(trovati[i]);
                if (singola.matches()) {
                    System.out.println("Nome abbreviato: "+singola.toMatchResult().group(1)); // Stampa 17
                    System.out.println("Nome intero: "+singola.toMatchResult().group(2)); // Stampa 23
                    System.out.println("Nome abbreviato: "+singola.toMatchResult().group(3)); // Stampa 1986
                } else {
                    System.out.println("Non corrisponsto");
                }
                System.out.println("================");
            }
    Stampa:
    Nome abbreviato: AG
    Nome intero: Agrigento
    Nome abbreviato: AG
    ================
    Nome abbreviato: AL
    Nome intero: Alessandria
    Nome abbreviato: AL
    ================
    Nome abbreviato: AN
    Nome intero: Ancona
    Nome abbreviato: AN
    ================
    ...

  6. #6
    Originariamente inviato da LordSaga640
    codice:
            Pattern p = Pattern.compile("</option>");
            String[] trovati = p.split("<option value=\"AG\">Agrigento - AG</option><option value=\"AL\">Alessandria - AL</option><option value=\"AN\">Ancona - AN</option>");
            Pattern p2 = Pattern.compile("<option value=\"(\\w\\w)\">(.+?) - (\\w\\w)");
            for (int i = 0; i < trovati.length; i++) {
                Matcher singola = p2.matcher(trovati[i]);
                if (singola.matches()) {
                    System.out.println("Nome abbreviato: "+singola.toMatchResult().group(1)); // Stampa 17
                    System.out.println("Nome intero: "+singola.toMatchResult().group(2)); // Stampa 23
                    System.out.println("Nome abbreviato: "+singola.toMatchResult().group(3)); // Stampa 1986
                } else {
                    System.out.println("Non corrisponsto");
                }
                System.out.println("================");
            }
    Stampa:
    Grazie mille però non capisco la parte relativa al Pattern p2, ovvero: Pattern.compile("<option value=\"(\\w\\w)\">(.+?) - (\\w\\w)");

    Allora, \w starebbe a significare ogni lettera, numero e _ . Allora perchè ne hai messi due? E cosa significa quel "(.+?)" e quel meno (\\w\\w)? o_O

  7. #7
    sì, \w sta per ogni carattere alfanumerico. Ne ho messi due perchè voglio verificare due caratteri alfanumerico tra le virgolette.
    Le parentesi tonde servono per "catturare" il contenuto tra le parentesi.

    Il . (punto) è ogni carattere. Il + e il ? stanno a significare che il motore delle regex non deve essere ignordo ma deve verificare almeno i caratteri da 1 a infinito.
    Il meno è il carattere da verificare. E gli ultimi due \w\w sono l'ultima abbreviazione della città.

    Sembrano difficile. Se vuoi un consiglio vatti a leggere la guida delle REGEX di perl che più o meno sono la stessa cosa. E con poche istruzioni ti permettono di risolvere il 98% dei casi
    ...

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.