验证我的正则表达式是否按预期工作

时间:2013-03-19 11:48:26

标签: c# regex

这是我生产代码的第一个正则表达式,直到现在我总是避免自己编写它们,现在我有点担心它是否真的像预期的那样工作。我试图打破它做了很多尝试,但我真的不想依赖它,特别是当我没有经验时。

我的正则表达式应该与此模式完全匹配

  • 第一个字符必须是其中一个字母(不区分大小写) - K,C,M,X,S,W
  • 第二个字符必须是0-9
  • 中的一个数字
  • 连字符-
  • 4个字母数字字符(A-Z0-9)(不区分大小写)和
  • 一个字母(A-Z)(不区分大小写)。

就是这样。它不能短,它不能长,它必须完全匹配这种模式。我现在拥有的是:

string RegExPattern = @"^(K|C|M|X|S|W){1}[0-9]{1}[-]{1}[A-Z0-9]{4}[A-Z]{1}$";
if (!Regex.IsMatch(txtCode.Text, RegExPattern, RegexOptions.IgnoreCase))
{
    MessageBox.Show("Fail");
    return false;
}

是否有任何工具或其他方法来验证正则表达式的行为,这个正则表达式是否适合我上面解释的匹配模式?

3 个答案:

答案 0 :(得分:6)

是的,这是正确的。

但是,所有{1}都是多余的,您可以创建一组使用|运算符的第一个字符,并且您不需要用于短划线的集合:

string RegExPattern = @"^[KCMXSW][0-9]-[A-Z0-9]{4}[A-Z]$";

有用于编写和测试正则表达式的工具,但您只能使用它们来测试您能想到的输入中的任何变体,而且您似乎已经这样做了。

答案 1 :(得分:4)

验证和开发正则表达式的好工具:http://www.debuggex.com。不过,我建议你用一堆单元测试来具体化你的正则表达式。

答案 2 :(得分:2)

最好的工具是一套单元测试,或者是一个迭代几十个文本块的单个测试。

创建一个文本文件,其中包含一大堆文本行,这些文本行将与此模式将使用的数据类似。确保某些行匹配,并且某些行不匹配规则的不同部分(例如:匹配除第一个字符之外的所有字符的模式,一个匹配除最后一个字符之外的所有字符,一个仅具有2或3个字符的字符等等,等等。

然后,编写一个小程序,读取每行文本并对其运行表达式。让它打印匹配行的行号,然后将该数字列表与预期结果进行比较。