Trovare una sottostringa con spazio in Postgres

Sto cercando  in Postgres di trovare una sottostringa (substring) all'interno di una più grande contenente anche uno spazio, ossia la substring non è una parola singola, ma composta da due parole, come ad es il nome e cognome di una persona, attualmente ho scritto:

substring ((data) :: text from '(?: "Name": ") ([a-zA-Z0-9 ._-] *)')

La risposta (la sottostringa ritornata) dovrebbe essere simile a: "nome": "Mario Rossi" ... desidero fare in modo che trovi il nome completo (con lo spazio), ma con l'istruzione substring che ho scritto, attualmente trova solo a 'Mario'. Ho provato ad aggiungere \ s senza fortuna. Qualcuno ha idea di cosa sto facendo di sbagliato?

In Corso 4
PostgreSQL 17-10-2019 1 Risposta 1170 Visite +1
Carmen Lo Niuro

Carmen Lo Niuro

Autore di questa domanda

Risposte ( 1 approvate )

  1. Carmen Lo Niuro
    0
    17-10-2019 19:20:51
    Rispondi

    Postgresql regex non ha alcun problema con l'identificatore \s (trova spazi, tabulazioni e new line). Quindi suppongo che tu abbia usato il \s alla fine della tua regex subito dopo il trattino (-) può portare differenza nel comportamento di \s nell'identificazione dello spazio. Per esempio se tu scrivi:

    ([a-zA-Z0-9._-\s]*)

    il trattino - vicino all'identificatore \s può essere un problema, tu puoi provare a farne l'escape precedendolo con il back slash \, in questo modo:

    ([a-zA-Z0-9._\-\s]*)

    oppure metti l'identificatore dello spazio \s in qualsiasi posto della regex, come ad es. all'inizio, così:

    ([\sa-zA-Z0-9._-]*)

    prova così e non dovresti avere problemi.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

 Domanda Precedente

 Elenco Domande 

Domanda Successiva