简单的正则表达式模式

时间:2009-03-08 16:13:36

标签: c# regex

我正在使用C#,我试图只允许使用字母和空格。我现在的表达是:

string regex = "^[A-Za-z\s]{1,40}$";

我的IDE说\ s是“无法识别的转义序列”

我错过了什么?

3 个答案:

答案 0 :(得分:6)

“\”是一个c#转义字符以及一个正则表达式转义字符。尝试:

string regex = @"^[A-Za-z\s]{1,40}$";

答案 1 :(得分:2)

您需要在字符串前加@将其转换为verbatim string literal

string regex = @"^[A-Za-z\s]{1,40}$";

现在,正则表达式中的\被解释为试图逃避编译器不理解的以下s

或者,你可以用另一个反斜杠来逃避反斜杠:

string regex = "^[A-Za-z\\s]{1,40}$";

但总的来说,更喜欢第一种方法。

答案 2 :(得分:1)

另外请注意,你的正则表达式不符合你的描述。你说单词之间最多有1个空格。为此,您需要将“\ s”移出字符列表。您当前使用的模式允许“1到40次的任何字母数字或空格”,这允许多个连续的空格。你需要更多类似的东西:

string regex = @"^(?:[A-Za-z]+\s?)+$";

这意味着“任何字母数字1次或更多次后跟可选空格,整个事情一次或多次”。如果您事先不知道第一个表达式的大小,我不知道如何将整个字符串限制为40个字符。也许这可以通过“后视”表达来实现,但我不确定。您可能需要分两步完成。