2016-11-25 75 views
2

我要尋找一個正則表達式匹配n個零,然後在1 例如:正則表達式N 0再1

0000100 -> matches 
00200 -> does not math 

我以爲這是類似的東西:

var regex = new Regex(@"[0]*[2-9]+"); 
+5

你正則表達式匹配零個或多個0,後跟一個或多個從2到9的任意一個數字。這聽起來像是你想要做的相反 – UnholySheep

+0

你的正則表達式中的'1'在哪裏? – Heinzi

+1

你是什麼意思的n零?是定義的還是任意數量的零? – Prajwal

回答

2

的LINQ解決方案(沒有正則表達式):

string source = "0001"; 

bool isValid = source 
    .SkipWhile(c => c == '0') 
    .FirstOrDefault() == '1'; 

如果你堅持的正則表達式:

bool isValid = Regex.IsMatch(source, "^0*1"); 

在這兩種情況下以上0之後1

4

^[0]+[1]是你想要什麼:

^線開始

[0]匹配0

+至少一次

[1]比賽1

你也可以在最後加一個$,如果你想匹配的完整產品線。

注意:如果你想能夠匹配n = 0時(即只是1),你需要: ^[0]*[1]

注:括號[]是可選的,因爲它們只包含一個字,但我認爲他們使閱讀更容易。例如,如果您願意,您可以使用^0+1

參見http://regexstorm.net/reference(例如)一個完整的C#正則表達式參考

+0

我不認爲OP希望1在行尾(根據提供的匹配示例) – UnholySheep

+1

爲什麼必須使用'[]'? –

+0

@UnholySheep剛剛注意到,更新了我的答案。謝謝 – simonalexander2005

0

沒有必要正則表達式的位置:從0左修剪字符串,如果它不爲空或空,檢查的第一個字符。

var s = "00001"; 
if (!string.IsNullOrEmpty(s.TrimStart('0')) && 
    s.TrimStart('0').Substring(0, 1) == "1") 
{ 
    /* Valid, otherwise, not */ 
} 

如果你有在字符串開頭的數字,只是需要一個布爾結果,這將工作。