2016-04-22 78 views
3

我試圖從字符串中獲得匹配的自尊。我必須從給定的字符串中得到兩種數字。數字從5開始,由6位數字開始。 ex(5******),從1開始後取5位數字(1*****)。從字符串中獲取具體的數字,以c#中的整數開頭#

我用下面的regexex:

(5)[\d]{6} 
(1)[\d]{5} 

代碼:這裏

var sampleId5 = Regex.Match(input, @"(5)[\d]{6}"); 
    if (sampleId5.Success) 
    { 
     string test = sampleId5.Value; 
    } 

    var sampleId1 = Regex.Match(input, @"(1)[\d]{5}"); 
    if (sampleId1.Success) 
    { 
     string test1 = sampleId1.Value; 
    } 

的問題是,我是否通過5106542它返回兩者協調的結果。我也試過(^5)[\d]{6}。儘可能地,它不工作。

我只需要5***** *。任何幫助都會得到真正的重視。

+0

'(^ 5)[\ d] {6} =^5 \ d {6}'有什麼問題? –

+1

不確定,因爲問題不明確:您是在尋找['\ b(5 \ d {6} | 1 \ d {5})\ b'](http://regexstorm.net/tester?p=% 5cb(5%5cd%7b6%7d%7c1%5cd%7b5%7d)%5cb&i = 5106542)與'Regex.Matches'?請參閱[本演示](http://ideone.com/TpMlHz)。 –

+1

是否有一個原因,您需要驗證完全數字的字符串?有時候只是'10000 <= tryParseInt(輸入)<= 19999'是更好的解決方案。 – ryanyuyu

回答

2

問題是您的表達式不會對匹配的位置做任何要求,所以他們在中間找到匹配。

如果你需要找到適合自己的標準獨立的數字,加上你的表情兩側\b,以確保沒有字母/數字兩邊:

var sampleId1 = Regex.Match(input, @"\b(1)[\d]{5}\b"); 
//         ^^   ^^ 

現在表達只考慮孤立的數字序列,5106542不會匹配,因爲匹配的序列位於中間。

+0

謝謝巴迪。它的工作。很抱歉,遲到的確認。 –

0

試試這個: ^(5 \ d {6} | 1 \ d {5})

你應該得到的整數,則只需選中的第一位。 但是,您可能希望在正則表達式的末尾添加「$」或\ b(如dasblinkenlight指出的那樣)。