2010-11-01 12 views

Respuesta

47

Escape the hyphen.

[a-zA-Z0-9!$* \t\r\n\-] 

ACTUALIZACIÓN:
No importa que esta respuesta - que puede añadir el guión para el grupo, pero que no tiene que escapar de ella. Ver Konrad Rudolph's answer en su lugar, que hace un trabajo mucho mejor de responder y explica por qué.

+0

Completamente innecesario. –

+0

Oh, ¿o sí? ¿Eso es porque está en un grupo de personajes? Mi error. –

+5

@KonradRudolph Tiene razón, pero no estoy seguro de que la versión no escamada sea más fácil de entender. Los dos posibles usos de dash son confusos, esta es la razón por la cual hay preguntas sobre esto para empezar. Ciertamente es más elegante una vez que lo sabes, pero para los principiantes es un poco confuso. –

2

¿Esto es lo que estás buscando?

MatchCollection matches = Regex.Matches(mystring, "-"); 
121

El guión suele ser un carácter normal en las expresiones regulares. Solo si está en una clase de caracteres y entre otros dos caracteres, toma un significado especial.

Por lo tanto:

  • [-] coincide con un guión.
  • [abc-] coincide con a, b, c o un guión.
  • [-abc] coincide con a, b, c o un guión.
  • [ab-d] partidos a, b, c o d (sólo aquí el guión indica un intervalo de caracteres).
+1

@rrr ¿Desea que él lo escriba así como también lo deletree? Todo lo que necesita hacer es agregar el guión al grupo. –

+8

@rrrr: Creo que he dado una respuesta. La pregunta era "cómo escribir 'X' ..." y creo que he explicado cómo hacer exactamente eso. Tomar mi respuesta y aplicar la explicación a la expresión actual no debería requerir más habilidades cognitivas de las que se requieren para un alumno de primer grado. De hecho, esto es * exactamente * lo que los estudiantes de primer grado aprenden cuando se les enseña la aritmética básica. Siéntete libre de corregir mi suposición. –

+0

[Hyphen se toma literalmente desde el interior de una clase de caracteres, si no puede formar un rango] (http://stackoverflow.com/questions/29458636/how-does-this-pattern-match-hyphen-without-escape). – MAKZ

9

Es menos confuso usar siempre un guión escapado, para que no tenga que depender posicionalmente. Eso es \- dentro de la clase de caracteres entre corchetes.

Pero hay algo más que considerar. Algunos de esos caracteres enumerados posiblemente deberían escribirse de manera diferente. En algunas circunstancias, definitivamente deberían.

Este comparison de sabores regex dice que C♯ puede usar algunas de las propiedades Unicode más simples. Si está tratando con Unicode, probablemente debería usar la categoría general \p{L} para todas las letras posibles, y quizás\p{Nd} para números decimales. Además, si desea acomodar toda la puntuación de ese guión, no solo HYPHEN-MINUS, debe usar la propiedad \p{Pd}. También es posible que desee escribir esa secuencia de caracteres en espacios en blanco simplemente como \s, suponiendo que no sea demasiado general para usted.

En conjunto, eso funciona en un apattern de [\p{L}\p{Nd}\p{Pd}!$*] para que coincida con cualquier carácter de ese conjunto.

Probablemente usaría eso de todos modos, incluso si no planeaba tratar con el conjunto Unicode completo, porque es un buen hábito para entrar, y porque estas cosas a menudo crecen más allá de sus parámetros originales. Ahora, cuando lo levante para utilizarlo en otro código, seguirá funcionando correctamente. Si codificas todos los caracteres, no será así.

+0

Tiendo a estar de acuerdo con esta respuesta, cuanto menos necesite saber, más seguro será el código. Esto me recuerda los problemas de las prioridades del operador: http://stackoverflow.com/questions/10007140/operator-precedence-and-ternary-operator, prefiero tener paréntesis en ellos (agregado automáticamente por mi IDE), sin necesidad de conocerlos a todos. . Usted u otra persona pueden echar a perder tarde o temprano. Por supuesto, si trabajas mucho con expresiones regulares en tus proyectos, es posible que necesites tener conocimientos más avanzados. –

0

utilice "\ p {Pd}" sin comillas para que coincida con cualquier tipo de guión.El carácter '-' es solo un tipo de guión que también es un personaje especial en Regex.

0

[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] + y también [az-0-9] + todos son iguales.El guión entre dos rangos considerados como un símbolo. Y también [a-z0-9 - +()] + esta expresión regular permite el guión.

Cuestiones relacionadas