2009-11-28 147 views
9

如何使用string.Format將值輸入到正則表達式中,其中正則表達式具有大括號,它已經定義重複限制? (我的頭腦從碰撞語中朦朧混淆語法)string.Format,正則表達式+花括號(C#)

例如正常的正則表達式是「^\ d {0,2}」,我希望從屬性MaxLength插入'2'

謝謝。

回答

19

雙花括號取代單花括號:

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

如果這讓你的眼睛受傷,你可以使用普通的字符串連接廣告:

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

字符串連接會使我的眼睛受傷;) – 2009-11-28 02:10:53

+2

如果您不喜歡其中任何一種,則可以使用另一種選擇@「^ \ d {0,$ MaxLength}」替換(「$ MaxLength」,MaxLength的ToString())。我不確定自己喜歡那個,因爲它不像C#一樣,但它確實保持了正則表達式的可讀性。 – 2009-11-28 02:18:09

4

您可以通過他們加倍逃避花括號:

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

在你的情況,這將是類似的東西:

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

有關格式化字符串的詳細信息,see MSDN

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

是的,額外的參數 可能需要(不,這不是在這種情況下),由於大括號解釋方式的偏心。有關更多信息,請參閱MSDN鏈接。總而言之,我必須同意Mark的觀點,在這種情況下,只需使用普通字符串連接即可。

+0

你錯過了一個閉合的花括號;) – 2009-11-28 01:55:36

+0

不,我不是;)抓住一個快速。 – 2009-11-28 01:56:19