2009-11-28 11 views
9

Come utilizzare string.Format per immettere un valore in un'espressione regolare, in cui l'espressione regolare contiene parentesi graffe per definire limiti di ripetizione? (La mia mente è offuscata dalla collisione per la sintassi)string.Format, regex + parentesi graffe (C#)

ad es. La regex normale è "^\ d {0,2}", e desidero inserire il '2' dalla proprietà MaxLength

Grazie.

risposta

19

Sostituire singole parentesi graffe con le doppie parentesi graffe:

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

Se ciò ti fa male agli occhi, potresti semplicemente utilizzare la stringa ordinaria di concatenazione delle stringhe annuncio:

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

la concatenazione di stringhe fa * i miei * occhi feriti;) –

+2

Se non ti piace uno di questi, un'altra opzione potrebbe essere @ "^ \ d {0, $ MaxLength}". Sostituisci ("$ MaxLength", MaxLength .Accordare()). Non sono sicuro che mi piaccia perché non è C# -like, ma mantiene l'espressione regolare in forma leggibile. –

4

Si può sfuggire parentesi graffe da loro il raddoppio:

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

Nel tuo caso, sarebbe qualcosa di simile:

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

Per ulteriori informazioni sulle stringhe di formattazione, see MSDN

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

E sì, il parametro più è possono essere richiesto (no, non è in questo caso) a causa della eccentricità del modo in cui le parentesi sono interpretate. Vedi il link MSDN per ulteriori informazioni.

Tutto sommato, devo essere d'accordo con Mark, basta andare con la concatenazione di stringhe normale in questo caso.

+0

ti manca una parentesi graffa di chiusura;) –

+0

No, non lo sono;) Catturato quello velocemente. –

Problemi correlati