Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    problema di sintassi REGEX

    devo estrarre da un file di testo tutto ciò che sta tra la prima occorrenza di 2 "a capo" e la fine

    codice:
                pattern = Pattern.compile ("\n\n(.*?)", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
                matcher = pattern.matcher(testo);
                if(matcher.find())
                {
                    autore=matcher.group(0);
                }
    però non ottengo ciò che vorrei, ma solo un testo vuoto.
    consigli?

    grazie a tutti

  2. #2
    Se il file di testo è stato prodotto sotto windows potresti avere dei carriedge return oltre che i classici \n ... ossia dei \r\n

    "\r?\n\r?\n(.*)"

    se provi così cosa ti da?
    OUTSHINE '84

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

    Re: problema di sintassi REGEX

    Originariamente inviato da ranza!!!123
    devo estrarre da un file di testo tutto ciò che sta tra la prima occorrenza di 2 "a capo" e la fine

    codice:
                pattern = Pattern.compile ("\n\n(.*?)", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
    Tanto per cominciare, la sequenza di newline .... dipende quale è. Se il testo contiene i newline \r\n (stile dos/win), ovviamente non catturi un bel nulla, perché nella regex \n vuol dire proprio solo "line-feed" ... non "la sequenza di newline".

    Poi comunque non credo che ti serva espressamente .* con ? (quantificatore reluctant) ... quindi basta solo .*
    Infine, il gruppo 0 è tutto quanto catturato, se volevi solo la parte contenuta tra ( ) allora è il gruppo 1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    grazie a entrambi..
    il ritorno a capo l'avevo già controllato, era effettivamente solo \n

    a quanto pare è bastato togliere il ? dalla regex per ottenere il risultato sperato, quindi se gentilmente qualcuno mi spiegasse cosa fa il ? gliene sarei grato

  5. #5
    il ? serve ad indicare che il simbolo (o gruppo di simboli tra tonde) che lo precede può esserci nel testo 0 o 1 volta ... usare un .* stai gia dicendo qualsiasi carattere da 0 a N volte ripetuto. Quindi il ? di domanda non serve .

    Se vuoi un programmino figo dove provare le espressioni regolari ti posso consigliare quello che uso io , genera anche direttamente il codice per vari programmi (C#, Java, ...):
    http://www.ultrapico.com/ExpressoDownload.htm

    ed è completamente freeware !
    OUTSHINE '84

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Outshine84
    il ? serve ad indicare che il simbolo (o gruppo di simboli tra tonde) che lo precede può esserci nel testo 0 o 1 volta
    Sì ma quella è un'altra situazione .... non centra con .*?

    Originariamente inviato da Outshine84
    usare un .* stai gia dicendo qualsiasi carattere da 0 a N volte ripetuto. Quindi il ? di domanda non serve .
    Servirebbe se si vuole un quantificatore "reluctant" (riluttante). Ma visto che tanto deve prendere "tutto quanto segue" basta un normale quantificatore "greedy".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    grazie a tutti!

  8. #8

    Patter per useDelimiter()

    Salve ragazzi io ho un problema un po' più semplice...spero di non essere OT...comunque io volevo sapere qual era la sintassi corretta del patter per usare come delimitatori di una stringa sia il carattere "a capo" ("\n" se non sbaglio) e anche il carattere ":" (due punti)...
    Mi serve per un particolare problema e ogni volta faccio un macello con la sintassi del Pattern..
    Mi serve questo sintassi per inserirla nel metodo useDelimiter della classe Scanner
    Grazie mille delle vostre risposte!!

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.