2009-11-28 25 views
9

¿Cómo uso string.Format para ingresar un valor en una expresión regular, donde esa expresión regular tiene llaves en ella para definir la limitación de repetición? (Mi mente está nublada por la sintaxis de colisión)string.Format, regex + llaves (C#)

p. La expresión regular normal es "^\ d {0,2}", y deseo para insertar el '2' de la propiedad MaxLength

Gracias.

Respuesta

19

reemplazar llaves individuales con tirantes dobles rizadas:

string regex = string.Format(@"^\d{{0,{0}}}", MaxLength); 

Si eso le lastima los ojos, puede usar una cadena de concatenación común ad:

string regex = @"^\d{0," + MaxLength + "}"; 
+3

la concatenación de cadenas hace que * my * eyes dolido;) –

+2

Si no te gusta ninguno de estos, otra opción podría ser @ "^ \ d {0, $ MaxLength}". Replace ("$ MaxLength", MaxLength .Encadenar()). No estoy seguro de que me guste porque no es parecido a C#, pero sí mantiene la expresión regular en forma legible. –

4

Puede escapar de llaves con la duplicación de ellas:

string.Format("Hello {{World}}") // returns "Hello {World}" 

En su caso, sería algo así:

string regexPattern = string.Format("^\d{{0,{0}}}", MaxLength); 
2

Para más detalles sobre las cadenas de formato, see MSDN

var regex = String.Format(@"^\d{{0,{0}{1}", this.MaxLength, "}") 

Y sí, el parámetro adicional es puede haber requerida (no, no lo es en este caso) debido a la excentricidades de la forma en que se interpretan las llaves Vea el enlace de MSDN para más.

Con todo, tengo que estar de acuerdo con Mark, simplemente vaya con la concatenación de cadenas normal en este caso.

+0

te falta un corsé de cierre;) –

+0

No, no lo soy;) Lo atrapé rápidamente. –