程序被赋予一个字符串,用于表示电子表格中的单元格名称。此电子表格可以包含一个名称以字母a-zA-Z_开头的单元格,必须是这种情况,其他任何内容都无效。在第一个字母或下划线之后,可以有字母数字或下划线的任意组合。例如:
______35we3I
是有效名称
123dfdf
不是有效名称。
如果存在这些字符串,我想抛出异常。我是正则表达式的新手,但这是我想出来的,它并不像我想要的那样工作。
@"[a-zA-Z_][a-zA-Z_|\d]*"
当在Regex.IsMatch
函数中传递第二个示例时返回true,因为表达式的后半部分有效。有没有办法从字符串的开头开始?
我应该说我尝试使用{^}来完成上述条件,但当胡萝卜在那里时它不接受任何东西。
答案 0 :(得分:4)
您需要使用开始和结束锚点,而不需要将|
放在字符类中。 char类中的|
将匹配文字|
符号。
@"^[a-zA-Z_][a-zA-Z_\d]*$"
代码:
String s = "123dfdf";
if (!Regex.IsMatch(s, @"^[a-zA-Z_][a-zA-Z_\d]*$")) {
Console.WriteLine("Error! Wrong format.");
}
else {
Console.WriteLine("Correct format.");
}
答案 1 :(得分:2)
为了测试你的正则表达式,你有一个非常好的网站here
对于正则表达式,您希望在正则表达式中添加一个数字验证器:
@"^[0-9a-zA-Z_][a-zA-Z_\d]*"
有了这个,你的两个字符串就是验证。
@"^[a-zA-Z_][a-zA-Z_\d]*"
有了这个,只是字符串启动而不是数字是验证。