c# - regulares - ¿Cómo hacer coincidir los guiones con la expresión regular?
expresiones regulares tutorial (6)
¿Cómo volver a escribir el patrón [a-zA-Z0-9!$* /t/r/n]
para que coincida con el guión junto con los caracteres existentes?
¿Es esto lo que buscas?
MatchCollection matches = Regex.Matches(mystring, "-");
El guion es generalmente un caracter normal en expresiones regulares. Solo si está en una clase de personaje y entre otros dos caracteres, toma un significado especial.
Así:
-
[-]
coincide con un guion -
[abc-]
coincide cona
,b
,c
o un guion. -
[-abc]
coincide cona
,b
,c
o un guion. -
[ab-d]
coincide cona
,b
,c
od
( solo que aquí el guión denota un rango de caracteres).
Es menos confuso usar siempre un guión escapado, para que no tenga que depender posicionalmente. Eso es un /-
dentro de la clase de personaje 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.
Esta 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 tal vez /p{Nd}
para números decimales. Además, si desea acomodar toda la puntuación del tablero, no solo HYPHEN-MINUS, debe usar la propiedad /p{Pd}
. También es posible que desee escribir esa secuencia de caracteres en blanco simplemente como /s
, suponiendo que no sea demasiado general para usted.
Todos juntos, eso funciona para un apattern de [/p{L}/p{Nd}/p{Pd}!$*]
Para emparejar cualquier carácter de ese conjunto.
Probablemente usaría eso de todos modos, incluso si no planeara lidiar con el conjunto completo de Unicode, 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í.
Escape del guion
[a-zA-Z0-9!$* /t/r/n/-]
ACTUALIZAR :
No importa esta respuesta: puede agregar el guión al grupo pero no tiene que escapar. Ver la respuesta de Konrad Rudolph en su lugar, que hace un trabajo mucho mejor de responder y explica por qué.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] + y también [az-0-9] + todos son iguales. El guion entre dos rangos considerado como símbolo.Y también [a-z0-9 - + ()] + esta expresión regular permite el guión.
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.