2014-10-03 70 views
1

程序在电子表格中为单元格的名称提供了字符串。该电子表格可以包含一个名称以字母a-zA-Z_开头的单元格,但其他任何信息都是无效的。在第一个字母或下划线之后,可以有字母数字或下划线的任意组合。例如:使用正则表达式匹配字符串c#

______35we3I是一个有效的名称

123dfdf是不是一个有效的名称。

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

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

当第二个例子是在Regex.IsMatch函数传递,因为表达式的后半部分是有效返回true。有没有一种方法可以始终从字符串的开头开始?

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

+1

对我来说似乎很好,只是通过添加表达式的开始和结尾来测试它:这里是链接http://rubular.com/r/UMIcvl0olc – 2014-10-03 15:15:14

+1

Avinash给出了很好的建议。我只想添加一些东西:为了测试你的正则表达式,你可以使用RadSoftware正则表达式设计器(http://rad-software-regular-expression-designer.software.informer.com/1.4/),它非常强大,而且它的构建在.Net中,它提供与.Net正则表达式类完全相同的选项。 – AFract 2014-10-03 15:30:11

回答

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

+0

非常感谢。我想我只是使用错误的网站来测试我的正则表达式。 – 2014-10-03 15:40:51

2

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

为了您的正则表达式,你想添加一些验证程序你的正则表达式:

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

与此,你的两个字符串被验证。

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

与此,只是字符串由不是一个数字开始被验证。

+2

op不希望数字首先出现。 – 2014-10-03 15:21:28

+1

哦,对不起我的错误,感谢您的回复:p – 2014-10-03 15:23:04

+1

字符类内部的'|'符合字面上的'|'符号。 – 2014-10-03 15:28:29