这是我生产代码的第一个正则表达式,直到现在我总是避免自己编写它们,现在我有点担心它是否真的像预期的那样工作。我试图打破它做了很多尝试,但我真的不想依赖它,特别是当我没有经验时。
我的正则表达式应该与此模式完全匹配
K,C,M,X,S,W
0-9
-
A-Z
或0-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;
}
是否有任何工具或其他方法来验证正则表达式的行为,这个正则表达式是否适合我上面解释的匹配模式?
答案 0 :(得分:6)
是的,这是正确的。
但是,所有{1}
都是多余的,您可以创建一组使用|
运算符的第一个字符,并且您不需要用于短划线的集合:
string RegExPattern = @"^[KCMXSW][0-9]-[A-Z0-9]{4}[A-Z]$";
有用于编写和测试正则表达式的工具,但您只能使用它们来测试您能想到的输入中的任何变体,而且您似乎已经这样做了。
答案 1 :(得分:4)
验证和开发正则表达式的好工具:http://www.debuggex.com。不过,我建议你用一堆单元测试来具体化你的正则表达式。
答案 2 :(得分:2)
最好的工具是一套单元测试,或者是一个迭代几十个文本块的单个测试。
创建一个文本文件,其中包含一大堆文本行,这些文本行将与此模式将使用的数据类似。确保某些行匹配,并且某些行不匹配规则的不同部分(例如:匹配除第一个字符之外的所有字符的模式,一个匹配除最后一个字符之外的所有字符,一个仅具有2或3个字符的字符等等,等等。
然后,编写一个小程序,读取每行文本并对其运行表达式。让它打印匹配行的行号,然后将该数字列表与预期结果进行比较。