将字符串与正则表达式c#匹配

本文关键字:匹配 正则表达式 字符串 | 更新日期: 2023-09-27 18:25:25

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

______35we3I是有效名称

123dfdf不是有效名称。

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

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

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

我应该说,我尝试使用{^}来满足上述条件,但当胡萝卜在那里时,它什么都不接受。

将字符串与正则表达式c#匹配

您需要使用开始和结束锚点,并且不需要将|放入字符类中。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-9a-zA-Z_][a-zA-Z_'d]*"

这样,您的两个字符串就被验证了。

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

这样,只验证了以非数字开头的字符串。