我正在寻找一个正则表达式来匹配n个零,然后是1。 E.g:
0000100 -> matches
00200 -> does not math
我认为是这样的:
var regex = new Regex(@"[0]*[2-9]+");
答案 0 :(得分:4)
^[0]+[1]
就是你想要的:
^
行开头
[0]
匹配0
+
至少一次
[1]
匹配1
如果您希望匹配整行,也可以在末尾添加$
。
注意:如果你想匹配n = 0(即只是1),你需要:
^[0]*[1]
注意:括号[]
是可选的,因为它们只包含一个字符,但我认为它们更容易阅读。例如,如果您愿意,可以^0+1
。
另请参阅http://regexstorm.net/reference(例如)了解完整的C#正则表达式参考
答案 1 :(得分:2)
Linq 解决方案(并且没有正则表达式):
string source = "0001";
bool isValid = source
.SkipWhile(c => c == '0')
.FirstOrDefault() == '1';
如果你坚持正则表达式:
bool isValid = Regex.IsMatch(source, "^0*1");
在两种情况下零或更多0
后跟1
答案 2 :(得分:1)
这里不需要正则表达式:从0
左边修剪字符串,如果它不是空或空,请检查第一个字符。
var s = "00001";
if (!string.IsNullOrEmpty(s.TrimStart('0')) &&
s.TrimStart('0').Substring(0, 1) == "1")
{
/* Valid, otherwise, not */
}
如果您在字符串的开头有数字并且只需要一个布尔结果,这将有效。