使用正则表达式识别字符串中的模式

时间:2016-04-21 15:27:05

标签: c# .net regex

如果这是一个重复的问题我很抱歉,因为我知道StackOverflow上有许多关于Regex的内容,但我还没有找到答案或我需要的帮助。

  

我的字符串需要长度为8,其中:

     
      
  • 前两个字符是字母

  •   
  • 接下来的五个字符是数字

  •   
  • 最后一个字母是一个字母

  •   
     

例如:“AB12345C”

我一直在使用MSDN& DotNetPerls尝试理解如何正确使用参数,但经过几天的阅读后,我仍然无法通过。

我目前正在尝试使用:

public Tuple<bool, string> stringFormatCheck(string input)
{            
     if (Regex.IsMatch(input, @"^[a-zA-Z]\d{2}[0-9]\d{5}[a-zA-Z]$") == true)
        return Tuple.Create(true, "String is Fine");
     else
        return Tuple.Create(false, "String Format is incorrect");
}

有人可以告诉我如何正确使用这个论点或者某个地方我可以更好地理解正则表达式类吗?谢谢。

EDIT1:我的第一个参数中的第二个Z现在已大写。

2 个答案:

答案 0 :(得分:1)

正确的模式是

"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$"
与恕我直言,明确的解释:

^           - string start (anchor)
[A-Za-z]{2} - 2 letters A..Z or a..z
[0-9]{5}    - 5 digits 0..9
[A-Za-z]    - letter A..Z or a..z
$           - string end (anchor)

所以实现可以

public Tuple<bool, string> stringFormatCheck(string input)
{            
    if (Regex.IsMatch(input, @"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$"))
        return Tuple.Create(true, "String is Fine");
    else
        return Tuple.Create(false, "String Format is incorrect");
}

请注意,[0-9]是一个更好的选择而不是\d,因为你可能, 不要让像<{1}}这样的波斯数字;

答案 1 :(得分:1)

试试这个:^[a-zA-Z]{2}[0-9]{5}[a-zA-Z]$

您的正则表达式:^[a-zA-z]\d{2}[0-9]\d{5}[a-zA-Z]$由于多种原因而无法正常工作。首先,第二个z应该大写。然后,第一个\d正在尝试匹配一个数字,因此您要说&#34;匹配任何字母然后两个数字。&#34;您使用第二个\d犯了同样的错误:您说&#34;匹配任何数字([0-9])然后匹配5位数(\d{5})。