2013-05-02 17 views
32

Sto costruendo una stringa di cognomi separati da trattini. A volte uno spazio bianco viene catturato lì. Devo rimuovere tutti gli spazi bianchi dal risultato finale.Rimuovi tutti gli spazi bianchi dalla stringa C# con regex

Esempio stringa su cui lavorare:

Anderson -Reed-Smith

Ha bisogno di finire come (senza spazio dopo Anderson):

Anderson-di Reed Smith

La stringa del cognome è in una stringa vari capace, LastName.

Sto usando un'espressione regolare:

Regex.Replace(LastName, @"[\s+]", ""); 

Il risultato di questo è:

Anderson -Reed-Smith.

Ho anche provato:

Regex.Replace(LastName, @"\s+", ""); 

e

Regex.Replace(LastName, @"\s", ""); 

Che cosa sto facendo di sbagliato?

+0

Non è necessario regex se il nome è gli unici dati nella stringa. Altrimenti puoi probabilmente usare (- | - | -) – Evo510

risposta

114

Invece di un RegEx uso Replace per qualcosa di così semplice:

LastName = LastName.Replace(" ", String.Empty); 
+3

Questo. Vorrei votare questa risposta in questo momento, ma ho raggiunto il mio limite di voto per oggi. – Renan

+1

Non sapevo che ci fosse un limite! –

+4

@Renan, torna domani e upvote :) – Gabe

11

Nessun bisogno di regex. Questo sarà anche rimuovere le schede, a capo ecc

var newstr = String.Join("",str.Where(c=>!char.IsWhiteSpace(c))); 

spazio bianco caratteri:0009 , 000a , 000b , 000c , 000d , 0020 , 0085 , 00a0 , 1680 , 180e , 2000 , 2001 , 2002 , 2003 , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 , 200a , 2028 , 2029 , 202f , 205f , 3000.

+4

avere un problema. Vuoi risolverlo con regex. Ora ho due problemi. Risolvilo con LINQ. Ancora due problemi :-) –

+1

@ JuliánUrbano Sì Regex può essere un problema durante il mantenimento, ma non posso dire lo stesso per Linq. – I4V

+1

@ JuliánUrbano, non dovresti mai * voler * risolvere qualsiasi cosa perché è una particolare API. Troppe domande vengono risolte su questo sito con una risposta LINQ, anche se - in sostanza - possono essere risolte molto più facilmente e molto più rapidamente. Scegli la soluzione migliore. –

44

Regex.Replace non modifica il suo primo argomento (ricordiamo che le stringhe sono immutabili nel NET) in modo che la chiamata

Regex.Replace(LastName, @"\s+", ""); 

foglie la stringa LastName invariata. È necessario chiamarlo in questo modo:

LastName = Regex.Replace(LastName, @"\s+", ""); 

Tutte e tre le vostre espressioni regolari avrebbero funzionato. Tuttavia, la prima espressione regolare rimuoverà anche tutti i caratteri positivi, che immagino non siano intenzionali.

-1

Di seguito è riportato il codice che sostituirà lo spazio bianco dal nome del file nell'URL specificato e inoltre possiamo rimuovere lo stesso utilizzando la stringa.vuoto al posto di "~"

if (!string.IsNullOrEmpty(url)) 
      { 
      string origFileName = Path.GetFileName(url); 
      string modiFileName = origFileName.Trim().Replace(" ", "~"); 
      url = url.Replace(origFileName , modiFileName); 
      } 
      return url; 
+0

Op ha detto _ "Ho bisogno di rimuovere tutti gli ** spazi bianchi **" _ e ho usato '\ s'. Ma questo maneggia solo lo spazio "" "ed è per lo più non correlato. Mentre 'Trim()' gestisce solo lo spazio iniziale e finale. Non mi sembra adatto. –

-1

Perché utilizzare Regex quando si può semplicemente utilizzare il metodo Trim()

Text='<%# Eval("FieldDescription").ToString().Trim() %>' 

O

string test = "Testing "; 
test.Trim(); 
+2

Richiede la rimozione di tutti gli spazi non solo di inizio e fine degli spazi –

0

più veloce e più in generale per fare questo (linea terminatori, le schede verranno elaborate pure). Le potenti strutture di Regex non sono davvero necessarie per risolvere questo problema, ma Regex può ridurre le prestazioni.

     new string 
          (stringToRemoveWhiteSpaces 
           .Where 
           (
            c => !char.IsWhiteSpace(c) 
           ) 
           .ToArray<char>() 
          ) 

O

     new string 
          (stringToReplaceWhiteSpacesWithSpace 
           .Select 
           (
            c => char.IsWhiteSpace(c) ? ' ' : c 
           ) 
           .ToArray<char>() 
          ) 
Problemi correlati