2016-04-21 102 views
1

如果这是一个重复的问题,我很抱歉,因为我知道有很多关于StackOverflow的正则表达式,但我还没有找到我需要的答案或一定程度的帮助。使用正则表达式来识别字符串模式

我有一个需要是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"); 
} 

能有人告诉我如何正确地使用这种说法或地方我可以得到一个更好的理解正则表达式类的?谢谢。

编辑1:我的第一个参数中的第二个Z现在大写。

+0

像”expresso“这样的工具(http://www.ultrapico.com/expresso.htm )或“监管机构”将帮助你分析,建立和测试你的正则表达式,你有没有试过其中的一个? –

+0

@PaoloTedesco不,我不知道这些工具是否存在,我肯定会考虑这些,谢谢你 – Rinktacular

+0

Your第一个'[a-zA-z]'是错误的,第二个Z应该是大写的。好奇你如何测试你的正则表达式,以及什么说服你没有工作。 – adv12

回答

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因为你可能 不想让,比如波斯文数字 like "AB۰۱۲۳۴C";

+0

非常感谢!出于好奇,大写字母A-Z是否需要在第一个和最后一个参数的小写a-z之前出现? – Rinktacular

+0

@Rinktacular:不,订单可以是任意的'A-Za-z'和'a-zA-Z'一样好。 –

+0

奇妙的是,代码现在按预期顺利通过。非常感谢,我可以看到我现在错了什么地方,并且可以在我未来的项目中正确使用它! – Rinktacular

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试图匹配一个数字,所以你说“匹配任何字母,然后两位数”。你犯第二个错误\d:你说:“匹配任何数字([0-9]),然后匹配5位数字(\d{5}

+0

(可能)计数器例子:''ABC“'被接受,当我确定它应该被拒绝;请注意*波斯*数字。 –

+0

@DmitryBychenko:可以通过'RegexOptions.ECMAScript'获得帮助。 –

+0

@DmitryBychenko,谢谢。我用'[0-9]'替换了'\ d'。 – adv12

相关问题