2016-04-21 102 views
1

如果這是一個重複的問題,我很抱歉,因爲我知道有很多關於StackOverflow的正則表達式,但我還沒有找到我需要的答案或一定程度的幫助。使用正則表達式來識別字符串模式

我有一個需要是8,其中長度的字符串:

  • 前兩個字符是字母

  • 接下來的五個字符是數字

  • 最後一個字母是字母

例如:「AB12345C」

我一直在用從MSDN & DotNetPerls的例子,試圖瞭解如何正確地使用參數,但是之後的閱讀圍繞幾天我仍然不能得到它通過。

我目前正在使用:

public Tuple<bool, string> stringFormatCheck(string input) 
{    
    if (Regex.IsMatch(input, @"^[a-zA-Z]\d{2}[0-9]\d{5}[a-zA-Z]$") == true) 
     return Tuple.Create(true, "String is Fine"); 
    else 
     return Tuple.Create(false, "String Format is incorrect"); 
} 

能有人告訴我如何正確地使用這種說法或地方我可以得到一個更好的理解正則表達式類的?謝謝。

編輯1:我的第一個參數中的第二個Z現在大寫。

+0

像」expresso「這樣的工具(http://www.ultrapico.com/expresso.htm )或「監管機構」將幫助你分析,建立和測試你的正則表達式,你有沒有試過其中的一個? –

+0

@PaoloTedesco不,我不知道這些工具是否存在,我肯定會考慮這些,謝謝你 – Rinktacular

+0

Your第一個'[a-zA-z]'是錯誤的,第二個Z應該是大寫的。好奇你如何測試你的正則表達式,以及什麼說服你沒有工作。 – adv12

回答

1

正確的模式是

"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$" 

用,恕我直言,明確的解釋:

^   - string start (anchor) 
[A-Za-z]{2} - 2 letters A..Z or a..z 
[0-9]{5} - 5 digits 0..9 
[A-Za-z] - letter A..Z or a..z 
$   - string end (anchor) 

所以它的實現可以

public Tuple<bool, string> stringFormatCheck(string input) 
{    
    if (Regex.IsMatch(input, @"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$")) 
     return Tuple.Create(true, "String is Fine"); 
    else 
     return Tuple.Create(false, "String Format is incorrect"); 
} 

請,通知,即[0-9]更好的選擇\d因爲你可能 不想讓,比如波斯文數字 like "AB۰۱۲۳۴C";

+0

非常感謝!出於好奇,大寫字母A-Z是否需要在第一個和最後一個參數的小寫a-z之前出現? – Rinktacular

+0

@Rinktacular:不,訂單可以是任意的'A-Za-z'和'a-zA-Z'一樣好。 –

+0

奇妙的是,代碼現在按預期順利通過。非常感謝,我可以看到我現在錯了什麼地方,並且可以在我未來的項目中正確使用它! – Rinktacular

1

試試這個:^[a-zA-Z]{2}[0-9]{5}[a-zA-Z]$

你的正則表達式:^[a-zA-z]\d{2}[0-9]\d{5}[a-zA-Z]$不出於多種原因的工作。首先,第二個z應該大寫。然後,第一個\d試圖匹配一個數字,所以你說「匹配任何字母,然後兩位數」。你犯第二個錯誤\d:你說:「匹配任何數字([0-9]),然後匹配5位數字(\d{5}

+0

(可能)計數器例子:''ABC「'被接受,當我確定它應該被拒絕;請注意*波斯*數字。 –

+0

@DmitryBychenko:可以通過'RegexOptions.ECMAScript'獲得幫助。 –

+0

@DmitryBychenko,謝謝。我用'[0-9]'替換了'\ d'。 – adv12

相關問題