我正在使用C#,我试图只允许使用字母和空格。我现在的表达是:
string regex = "^[A-Za-z\s]{1,40}$";
我的IDE说\ s是“无法识别的转义序列”
我错过了什么?
答案 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个字符。也许这可以通过“后视”表达来实现,但我不确定。您可能需要分两步完成。