2010-10-19 31 views

Respuesta

29

Uso Regex Resta

[\p{P}-[._]] 

Aquí está la enlace para la documentación de .NET Regex (no estoy seguro si otras versiones lo soportan) ... http://msdn.microsoft.com/en-us/library/ms994330.aspx

Aquí está un ejemplo de C#

string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others) 
string test = @"_""'a:;%^&*~`[email protected]#.,?"; 
MatchCollection mx = Regex.Matches(test, pattern); 
foreach (Match m in mx) 
{ 
    Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length); 
} 

Explicación El patrón es una resta clase de caracteres. Comienza con una clase de caracteres estándar como [\ p {P}] y luego agrega una clase de caracteres de resta como - [._] que dice que debe eliminarse. y _. La resta se coloca dentro de [] después de las tripas de clase estándar.

+0

Eso no parece coincidir ^, ~ o '; ¿podría probarlo incorrectamente, o .NET no los considera signos de puntuación? – Smashery

+0

Si suelta - [._], entonces \ p {P} tampoco coincide. – Les

+0

¿Entonces .NET no los considera como signos de puntuación? – Smashery

1

usted podría utilizar una clase de caracteres negada así:

[^0-9A-Za-z._\s] 

Esto incluye todos los personajes excepto los enumerados. Es posible que deba excluir más caracteres (como los caracteres de control), según sus requisitos últimos.

+0

Eso también recibiría espacios –

+0

De acuerdo, agregue espacio a la lista de exclusión. –

+4

Muy bien, pero quiero la mitad de su representante para esta pregunta ... –

8

Aquí hay algo un poco más simple. No palabras o espacios en blanco (donde las palabras incluyen A-Za-z0-9 Y guion bajo).

[^\w\s.] 
+0

¡También funciona en Ruby! – zanbri

12

Las respuestas hasta el momento no respetan TODA la puntuación. Esto debería funcionar:

(?![\._])\p{P} 

(Explicación: búsqueda negativa hacia delante para asegurar que ni . ni _ se emparejan, entonces cualquier carácter Unicode puntuacion.)

+0

Eso no parece coincidir con ^, ~ o '; ¿podría probarlo incorrectamente, o .NET no los considera signos de puntuación? – Smashery

+0

@Smashery Estos son acentos, nunca los usaría como signos de puntuación en el idioma inglés. – steinar

+0

¡Muchas gracias! Decidí aceptar la respuesta de Les, porque encuentro Regex Substraction más fácil de entender conceptualmente; por lo tanto, es más probable que lo recuerde; pero +1 - ¡gracias por enseñarme algunas cosas nuevas!(Ojalá pudiera aceptar dos respuestas) – Smashery

Cuestiones relacionadas