2013-03-21 28 views
1

我想创建正则表达式以完全匹配一个字符串格式。 的字符串会是这样正则表达式整数在单词没有正常失败

 
A3476,TextA 
B5628,TextB 
A9871,TextC 

第一个字符应为“A”或“B”,它会跟这应该是长度正好4字符和后跟“”整数。 只有逗号后三个单词将重复那些是'TextA'或'TextB'或'TextB'。

我已经试过这个表达式

 
(A|B)(\d{4})(,)(TextA|TextB|TextC) 

当我添加任何字母的整数或整数数大于4个字符长度的字符串匹配应该失败,但它不是失败。

假设如果字符串是喜欢这样7876,TextA这个

 
A653k7876,TextA 

我得到的结果。结果是缺少字符'A'并从结尾读取整数。我的意图是失败。

回答

0

用途:

\b(A|B)(\d{4}),(TextA|TextB|TextC)\b 

\ b表示单词边界

您可能会发现此链接有用:C# Regex Cheat Sheet

1

你的正则表达式是很好,除了你应该指明它应该开始,以比赛结束。 ^特殊字符表示行或字符串的开始,并且$结束。所以,试试这个来代替:

^(A|B)(\d{4})(,)(TextA|TextB|TextC)$ 

确保在创建Regex对象,使这项工作时指定RegexOptions.Multiline

+0

感谢它解决了。我正在尝试单线选项,没有'^'符号。 – PSR 2013-03-21 10:29:55

0

看起来我们需要更多的信息,因为如果我使用完全按照您提供的字符串,他们很好地工作:

Console.WriteLine(Regex.IsMatch(@"A653k7876,TextA", @"(A|B)(\d{4})(,)(TextA|TextB|TextC)")); 

输出错误 - 你想要的。