2016-11-25 70 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 */ 
} 

如果你有在字符串开头的数字,只是需要一个布尔结果,这将工作。