2

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

我的正则表达式应该完全匹配这个模式

  • 第一个字符必须是其中一个字母(不区分大小写) -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;
}

是否有任何工具或其他方式来验证正则表达式的行为,并且该正则表达式对于我上面解释的匹配模式是否正确?

4

3 回答 3

6

对,那是正确的。

但是,所有这些{1}都是多余的,您可以使用|运算符制作一组第一个字符,并且不需要为破折号设置一组:

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

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

于 2013-03-19T11:52:15.323 回答
4

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

于 2013-03-19T11:50:47.187 回答
2

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

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

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

于 2013-03-19T11:53:29.990 回答