使用正则表达式匹配字符串c#

时间:2014-10-03 15:09:57

标签: c# regex

程序被赋予一个字符串,用于表示电子表格中的单元格名称。此电子表格可以包含一个名称以字母a-zA-Z_开头的单元格,必须是这种情况,其他任何内容都无效。在第一个字母或下划线之后,可以有字母数字或下划线的任意组合。例如:

______35we3I是有效名称

123dfdf不是有效名称。

如果存在这些字符串,我想抛出异常。我是正则表达式的新手,但这是我想出来的,它并不像我想要的那样工作。

@"[a-zA-Z_][a-zA-Z_|\d]*"

当在Regex.IsMatch函数中传递第二个示例时返回true,因为表达式的后半部分有效。有没有办法从字符串的开头开始?

我应该说我尝试使用{^}来完成上述条件,但当胡萝卜在那里时它不接受任何东西。

2 个答案:

答案 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.");
}

IDEONE

答案 1 :(得分:2)

为了测试你的正则表达式,你有一个非常好的网站here

对于正则表达式,您希望在正则表达式中添加一个数字验证器:

@"^[0-9a-zA-Z_][a-zA-Z_\d]*"

有了这个,你的两个字符串就是验证。

@"^[a-zA-Z_][a-zA-Z_\d]*"

有了这个,只是字符串启动而不是数字是验证。