Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    [Java] Regular expression

    Ho stringhe di questo tipo

    Codice PHP:
    String s1 "1,'Viale delle Medaglie D''Oro, 41',,2,1,42,41.91038177396449,12.446491615846753";
    String s2 "45,'standard','station','false','7224'";
    String s3 "2072,574,2,to_timestamp('11-GIU-14 23:28:27,000000000','DD-MON-RR HH24:MI:SS,FF')"
    e ho bisogno di splittarle rispetto alle virgole.
    Il mio problema è che spezza anche le virgole che stanno all'interno, ad esempio, della funzione to_timestamp().
    Come posso scrivere una regular expression che faccia questo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prova a dare un'occhiata a questo thread, magari trovi del codice riutilizzabile
    http://stackoverflow.com/questions/9...in-parentheses
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da koala81 Visualizza il messaggio
    e ho bisogno di splittarle rispetto alle virgole.
    Il mio problema è che spezza anche le virgole che stanno all'interno, ad esempio, della funzione to_timestamp().
    Come posso scrivere una regular expression che faccia questo?
    Allora, valuta innanzitutto:
    a) Puoi far evitare che la virgola abbia anche un altro significato oltre che fare da separatore dei campi? (detto in altre parole: evitare proprio che ci siano quelle funzioni).
    b) Altrimenti: puoi almeno applicare un concetto di "escape" per cui ad esempio la virgola non-separatore sia ad esempio \,? (e quindi dovresti gestire anche \\ per l'escape di '\').
    c) Altrimenti, diventa secondo me abbastanza complesso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Il thread che mi ha segnalato Andrea1979 lo avevo già visto, ma non sono riuscito ad adattarlo alle mie esigenze.
    Per quanto riguarda i punti di andbin, il problema principale è che gli input mi arrivano così come li ho scritti, quindi qualsiasi modifica per fare un operazione di "escape" dovrei farla mirata e conoscere tutti i casi "non-buoni".
    Che era quello che volevo evitare.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non c'è niente da adattare, solo da fare copia-incolla:
    codice:
    /**
     *
     * @author Andrea
     */
    public class Example002 {
        
        
                
        public static void main (String[] args) {
            String regex = ",(?![^(]*\\))";
            String s1 = "1,'Viale delle Medaglie D''Oro, 41',,2,1,42,41.91038177396449,12.446491615846753";
            String s2 = "45,'standard','station','false','7224'";
            String s3 = "2072,574,2,to_timestamp('11-GIU-14 23:28:27,000000000','DD-MON-RR HH24:MI:SS,FF')";
            String[] str = new String[]{s1, s2, s3};
            String[] split;
            
            for (int i = 0; i < str.length; i++) {
                System.out.println("S"+(i+1)+": "+str[i]);
                split = str[i].split(regex);
                for (String s : split) {
                    System.out.println(s);
                }
                System.out.println("\n**************************\n");
            }
        }
        
    }
    e questo è l'output:
    codice:
    S1: 1,'Viale delle Medaglie D''Oro, 41',,2,1,42,41.91038177396449,12.446491615846753
    1
    'Viale delle Medaglie D''Oro
     41'
    
    
    2
    1
    42
    41.91038177396449
    12.446491615846753
    
    
    **************************
    
    
    S2: 45,'standard','station','false','7224'
    45
    'standard'
    'station'
    'false'
    '7224'
    
    
    **************************
    
    
    S3: 2072,574,2,to_timestamp('11-GIU-14 23:28:27,000000000','DD-MON-RR HH24:MI:SS,FF')
    2072
    574
    2
    to_timestamp('11-GIU-14 23:28:27,000000000','DD-MON-RR HH24:MI:SS,FF')
    
    
    **************************
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non credo che quello sia l'output che si aspetta. Ad esempio, 'Viale delle Medaglie D''Oro, 41' non deve essere splittata...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Boh, non ho la sfera di cristallo, però koala81 parlava solo di virgole dentro le parentesi. L'altra questione è da risolvere a monte (i dati sono raccolti male se il numero civico finisce con il nome della via)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Hai ragione Andrea1979, ho posto male io la cosa parlando solo di virgole dentro le parentesi; in effetti anche a me "spezzettava" l'indirizzo.
    Diciamo che solo per questo caso ho seguito il consiglio di andbin ed ho usato il concetto di "escape" che mi consigliava.
    Ho risolto, grazie a tutti

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.