1

我正在尝试编写非常简单的正则表达式——这个世界对我来说是全新的,所以我需要帮助。

我需要验证下一个模式:以 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”。

我的模式有什么问题?

4

4 回答 4

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
于 2013-07-03T04:37:49.600 回答
1
^C0\d{4,}$

字符串必须以 开头^C0后跟 4 位或更多位\d{4,}在字符串的末尾$

$如果它实际上不在字符串的末尾,只需取下最后一个。

如果您不想在中间夹入更多数字,只需删除逗号..

感谢@femtoRgon 的\d{4,}(见评论)。

于 2013-07-03T04:34:22.580 回答
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

于 2013-07-03T05:25:24.547 回答
-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

你会看到它只匹配你想要的。

于 2013-07-03T04:34:21.853 回答