Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    estrarre una porzione di testo da una variabile

    Salve,
    ho bisogno del vostro aiuto.
    come da titolo, io ho una variabile contenente del testo con dei delimitatori

    esempio

    pippo, pluto
    [START]
    paperino,topolino
    [END]
    minni, ecc

    vorrei, con un espressione regolare, poter estrapolare solo quello che c'è all'interno dei delimitatori [START][END].


    grazie mille

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

    Re: estrarre una porzione di testo da una variabile

    Originariamente inviato da hackerdm
    come da titolo, io ho una variabile contenente del testo con dei delimitatori

    esempio

    pippo, pluto
    [START]
    paperino,topolino
    [END]
    minni, ecc

    vorrei, con un espressione regolare, poter estrapolare solo quello che c'è all'interno dei delimitatori [START][END].
    Il testo è su più righe cioè ci sono dei newline in mezzo (dopo lo start e prima del end)? Oppure l'hai scritto così sopra solo per comodità di spiegazione?
    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
    Registrato dal
    Dec 2006
    Messaggi
    327
    in realtà è proprio cosi, con dei riporti a capo

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hackerdm
    in realtà è proprio cosi, con dei riporti a capo
    Il pattern più semplice è questo:

    codice:
    Pattern pattern = Pattern.compile("\\[START\\](.*)\\[END\\]", Pattern.DOTALL);
    Nota che in questo modo ci sono 2 conseguenze:
    a) Il contenuto all'interno dei due tag start/end lo trovi nel group(1) del Matcher.
    b) Il contenuto comprende i newline dopo start e prima di end (ma li puoi "trimmare" con trim() di String).

    Ci sarebbero altre varianti che si possono fare che permetterebbero di non catturare i tag start/end così che il gruppo 0 sia già il contenuto che ti serve (e magari potresti anche escludere i newline fastidiosi) ma sarebbero appunto espressioni più complesse.
    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
    Registrato dal
    Dec 2006
    Messaggi
    327
    grazie mille mi sei stato di grande aiuto, cmq se a qualcun altro potesse servire io ho usato questa espressione regolare per togliere i tag start/end

    Pattern pattern = Pattern.compile("(?<=\\[START\\])(.*?)(?=\\r\\n\\[END\\])", Pattern.DOTALL)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hackerdm
    grazie mille mi sei stato di grande aiuto, cmq se a qualcun altro potesse servire io ho usato questa espressione regolare per togliere i tag start/end

    Pattern pattern = Pattern.compile("(?<=\\[START\\])(.*?)(?=\\r\\n\\[END\\])", Pattern.DOTALL)
    Questa è una variante più complessa perché hai usato i "lookahead" e "lookbehind".

    Ma pure con quella che ti ho dato sopra io gli start/end non li avresti avuti .... semplicemente bastava prendere il group(1). Con la tua il group(0) (o semplicemente group() ) prende già il contenuto senza gli start/end, perché i lookahead/lookbehind per definizione sono "zero-width", non catturano nulla ma "guardano" solo.

    E infine 2 cose: in effetti il pattern migliore è .*? perché diventa "reluctant" (non ci ho pensato di scrivertela sopra nella mia) che è meglio se devi avere più occorrenze.
    Dato che nella tua l'intero match (ripeto: è il gruppo 0) è già solo il contenuto esclusi gli start/end, potresti anche evitare le parentesi tonde attorno a .*? perché sono superflue in quanto creano comunque il gruppo 1 che ora non ti serve più.

    Prima di "sparare" espressioni regolari, cerca di comprenderle prima. (non vuol essere una critica)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    in effetti non è che abbia tutta questa dimestichezza con le espressioni regolari, non ho mai avuto tempo per mettermici d'impegno, e adesso mi serviva una soluzione veloce ...cmq grazie per il tuo aiuto

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.