我正在尝试写一个非常简单的正则表达式 - 这个世界对我来说是全新的,所以我需要帮助。
我需要验证下一个模式:以C0开头并完成4位数,例如:
C01245 - legal
C04751 - legal
C15821 - not legal (does not starts with 'C0')
C0412 - not legal (mismatch length)
C0a457 - not legal
我拿了“备忘单”并写了下一个模式:
C0 \ A \ d {4)这意味着(我认为):以C0开头并继续4位数,但此模式始终返回“false”。
我的模式有什么问题?
答案 0 :(得分:3)
你必须使用这个正则表达式
^C0\d{4}$
^
将标记字符串的开头
$
将标记字符串
\d{4}
将匹配4位
你也可以这样做
if(input.StartsWith("C0") &&
input.Length==6 &&
input.Substring(2).ToCharArray().All(x=>Char.IsDigit(x)))
//valid
else //invalid
答案 1 :(得分:1)
^C0\d{4,}$
字符串必须以^
开头C0
,然后在字符串\d{4,}
末尾加上4位或更多位$
。
如果它实际上不在字符串的末尾,只需摘下最后的$
。
如果您不打算将更多数字夹在中间,请删除逗号..
感谢\d{4,}
的@femtoRgon(见评论)。
答案 2 :(得分:0)
请查看此代码段,
using System.IO;
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input1 = "C0123456";
// input1 starts with C0 and ends with 4 digit , allowing any number of
// characters/digit in between
string input2 = "C01234";
// input2 starts with C0 and ends with 4 digit , without
// characters/digit in between
String pattern1=@"\b[C][0][a-z A-Z 0-9]*\d{4}\b";
String pattern2=@"\b[C][0]\d{4}\b";
Match m = Regex.Match(input1, pattern1);
if(m.Success)
Console.WriteLine("Pattern1 matched input1 and the value is : "+m.Value);
m = Regex.Match(input2, pattern2);
if(m.Success)
Console.WriteLine("Pattern2 matched input2 and the value is : "+m.Value);
m = Regex.Match(input1, pattern2);
if(m.Success)
Console.WriteLine("Pattern2 matched input1 and the value is : "+m.Value);
m = Regex.Match(input2, pattern1);
if(m.Success)
Console.WriteLine("Pattern1 matched input2 and the value is : "+m.Value);
}
}
输出:
Pattern1匹配input1,值为:C0123456
Pattern2匹配input2,值为:C01234
Pattern1匹配input2,值为:C01234
答案 3 :(得分:-1)
如果你转到http://gskinner.com/RegExr/,你可以写下这个表达式:
^(C0[0-9]*[0-9]{4})[^0-9]
在你输入的内容中:
C012345 - legal
C047851 - legal
C*1*54821 - not legal (does not starts with 'C0')
C0412 - not legal (mismatch length)
C0*a*4587 - not legal
你会发现它只匹配你想要的东西。