2012-12-20 10 views
5

My Regex sta rimuovendo tutti i numeri (0-9) nella mia stringa. Non capisco il motivo per cui tutti i numeri sono sostituiti da _numero di regex I numeri di C# sono underscore ora

EDIT: ho capito che la mia "_" schema di espressione regolare cambia i caratteri in sottolineatura. Ma non perché i numeri!

Qualcuno può darmi una mano? Ho solo bisogno di rimuovere come tutti i personaggi speciali.

See regex qui:

string symbolPattern = "[[email protected]#$%^&*()-=+`~{}'|]"; 
Regex.Replace("input here 12341234" , symbolPattern, "_"); 

Output: "input here ________" 

risposta

8

Il problema è il vostro modello utilizza un trattino nel mezzo, che agisce come una serie di caratteri ASCII dal ) a =. Ecco la ripartizione:

  • ): 41
  • 1: 49
  • =: 61

Come si può vedere, i numeri partono da 49, e cade tra la gamma di 41-61 , quindi sono abbinati e sostituiti.

è necessario posizionare il - alle due all'inizio o alla fine della classe di caratteri per poter essere abbinato letteralmente piuttosto che agire come un intervallo:

"[[email protected]#$%^&*()=+`~{}'|]" 
+1

Grazie a tutti. Devo scegliere uno come risposta e questo è quello più dettagliato che ha spiegato il problema. Grazie per il tuo contributo. – Rob

1

Hai bisogno di fuggire i vostri caratteri speciali nella vostra regex. Ad esempio, * è una corrispondenza con caratteri jolly. Guarda cosa significano alcuni di quei personaggi speciali per la tua partita.

+1

Corretto per l'escaping (in particolare per "-"), ma '*" significa "0 o più", non "qualsiasi carattere". –

+0

@RowlandShaw: modificato – RonaldBarzell

4

si deve fuggire perché - sequenza [)-=] contiene cifre

string symbolPattern = "[[email protected]#$%^&*()\-=+`~{}'|]"; 
2

Spostare il - alla fine della lista in modo è visto come un letterale:

"[[email protected]#$%^&*()=+`~{}'|-]" 

O, per il anteriore:

"[[email protected]#$%^&*()=+`~{}'|]" 

Allo stato attuale, corrisponderà a tutti i caratteri nell'intervallo )-=, che include tutti i numeri.

0

Non ho usato C#, ma in genere il carattere "*" è anche un carattere di controllo che avrebbe bisogno di essere scappato.

i seguenti incontri una linea completa di caratteri, anche se il "^" e "$" sono un po 'di quello che ridondante:

^.*$ 

Questo corrisponde ogni numero di caratteri "A" che appaiono in una stringa:

A* 

Il libro "civetta" da oreilly è quello che si ha realmente bisogno di ricerca questo:

http://shop.oreilly.com/product/9780596528126.do?green=B5B9A1A7-B828-5E41-9D38-70AF661901B8&intcmp=af-mybuy-9780596528126.IP

+0

È un metacarattere regex e hai ragione che corrisponde a un numero qualsiasi di volte, tuttavia questo non è il caso quando si verifica all'interno di una classe di caratteri. Questo corrisponde letteralmente ad un asterisco: '[*]'. –

Problemi correlati