2008-10-08 32 views

Respuesta

60

sólo un FYI

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty); 

en realidad sería mejor así

string clean = Regex.Replace(q, @"[^\w\s]", string.Empty); 
+3

FYI \ w include _, too. – CSchulz

+9

"\ w" no es lo mismo que "a-zA-Z0-9". "\ w" incluye caracteres fuera de ese rango – markmnl

3

I sospecha^no funciona de la manera en que crees que es, fuera de una clase de personaje.

Lo que estás diciendo que hacer es reemplazar todo lo que no sea alfanumérico con una cadena vacía, O cualquier espacio principal. Creo que lo que quieres decir es que los espacios están bien para no reemplazarlos, intenta mover el \ s a la clase [].

+0

tienes razón, eso es con (que sabía, pero es tarde) –

1

Parece haber dos problemas.

  1. Estás usando el^fuera de un [], que coincide con el inicio de la línea
  2. no está utilizando un * o +, que significa que sólo coincidirá con un solo carácter.

Creo desea que la siguiente expresión regular @ "([^ a-zA-Z0-9 \ s]) +"

+0

¿No reemplazaría todos los alfanuméricos y espacios con la cadena vacía? – zigdon

+0

Respecto al n. ° 2, el cuantificador en realidad no importa ya que quiere reemplazar todos los caracteres no coincidentes en la cadena en lugar de solo una ejecución de ellos, lo que requiere un reemplazo global (.../g en Perl, no estoy seguro de la sintaxis C#), con o sin el */+. –

+0

C# regex es @ "^ [a-zA-Z0-9 \ r] + $" – marcel

0

La circunfleja dentro de los corchetes significa que todos los caracteres excepto el rango posterior. Desea una circunfleja fuera de corchetes.

+0

Sí, lo quiero dentro.Coincidir con cualquier cosa que no sea este rango de caracteres –

+1

Oh, donde dijiste "quiero" pensé que querías decir que querías una expresión regular para que coincida con eso. Quieres decir que quieres que el resultado de Reemplazar sea eso. Entonces quieres que la expresión regular no coincida con eso. Me duele el cerebro. –

12

lo tengo:

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty); 

No sabía que podría poner \ s en los soportes

+0

Su expresión regular solo coincidirá con cadenas que no contengan números alfanuméricos, números o espacios. El^al comienzo de un [] significa "nada aquí dentro" – JaredPar

+2

Eso es exactamente lo que quiero. En Regex.Replace, quiero hacer coincidir cualquier cosa que NO sea una letra, número o espacio. –

+0

Ah bien, más claro ahora. – JaredPar

16

Este:

string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty); 

\ x20 es ascii hexágono para el carácter 'espacio'

puede agregar más caracteres individuales que desea que sean permitidos. Si quiere, por ejemplo, "?" para estar bien en la cadena de retorno agregue \ x3f.

+0

también puede hacer coincidir un carácter ** ASCII ** como octal. En ese caso ** \ 040 ** representa un carácter de espacio. –

+0

... o simplemente puede escribirlos textualmente si son cosas simples como espacio o?: '[^ A-Za-z0-9?]' Etc. – ChrisF

2

La siguiente expresión regular es el espacio para su inclusión en el cuadro de texto.

Regex r = new Regex("^[a-zA-Z\\s]+"); 
r.IsMatch(textbox1.text); 

Esto funciona bien para mí.

+0

¿No sería '[A-z \\ s]' más fácil que '[a-zA-Z \\ s]'? – Alexander

Cuestiones relacionadas