2011-01-31 14 views
6

Ho una serie di paragrafi che voglio analizzare usando le espressioni regolari, ma sfortunatamente il paragrafo appare con molti spazi bianchi tra le frasi e talvolta le parole. Mi piacerebbe essere in grado di rimuovere tutto lo spazio bianco in eccesso, ma non sono sicuro di come ... Qualcuno ha qualche idea? Non voglio rimuovere tutti gli spazi bianchi, che è l'unica cosa che ho trovato finora, ma per mantenere il formato regolare del paragrafo, poiché ogni parola ha uno spazio bianco e dopo ogni punteggiatura + la parola ha uno spazio bianco. Sto codificando in Perl.Come rimuovere spazi vuoti in eccesso usando String Reg.

Qualsiasi aiuto sarebbe apprezzato!

risposta

14

Canonizza padding orizzontale:

s/\h+/ /g; 

Canonizza uno spazio verticale:

s/\v+/\n/g; 

Canonizza tutti gli spazi:

s/[\h\v]+/ /g; 
+0

Grazie! L'ultimo è perfetto !!! (Lo so, non dovrei ancora usare regex: P) – Sheldon

4

È possibile utilizzare la semplice perl regex

s/\s+/ /g; 

FYI, questo genere di cose è meglio farlo con lo strumento unix tr

tr -s ' ' 

Will squeeze spazi in un singolo spazio.

+2

Perl ha tr /// anche: tr/\ n \ r \ f \ t// s – tadmc

+0

Buon punto, grazie per l'aggiunta. – ocodo

1

Entrambe le risposte sopra stanno dando il risultato, ma in entrambi i casi , c'è uno spazio all'inizio e alla fine della stringa.

Se io uso questi regex su stringa "ciao mondo", sto ottenendo la risposta come "ciao mondo"

Per ottenere il risultato come "ciao mondo", la seguente espressione regolare Perl funzionerà bene

$a =~ s/(?<!\w) //g; 

Utilizzando il look-behind qui, vengono rimosse tutte le distanze extra.

Problemi correlati