C# 正则表达式空间字符不工作

C# 正则表达式空间字符不工作,c#,asp.net,regex,C#,Asp.net,Regex,我的正则表达式表示加拿大邮政编码,只允许使用有效字母: Regex模式=新的Regex(“^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$” 我遇到的问题是,我想在每个集合之间留出一个空格,但找不到要使用的正确字符。使用\s标记作为空白,而不是/s 一些方便的工具可以加速正则表达式的开发: 帮助语法并提供实时测试 (是的,我知道:))使你的表情形象化 在正则表达式中,空格(\

我的正则表达式表示加拿大邮政编码,只允许使用有效字母:
Regex模式=新的Regex(“^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$”

我遇到的问题是,我想在每个集合之间留出一个空格,但找不到要使用的正确字符。

使用
\s
标记作为空白,而不是
/s

一些方便的工具可以加速正则表达式的开发:

  • 帮助语法并提供实时测试
  • (是的,我知道:))使你的表情形象化

在正则表达式中,空格(\s)是正斜杠而不是反斜杠。下面的正则表达式应该可以工作

@"^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$"

如果您只是在搜索空间使用
\s

要提供转义序列字符
\
请在给定示例中使用
@
verbitm文本字符,如下所示

Regex pattern = new Regex(@"^[ABCEGHJKLMNPRSTVXY][0-9]\s[ABCEGHJKLMNPRSTVWXYZ[0-9]\s[ABCEGHJKLMNPRSTVWXYZ][0-9]$");
正如注释中所指出的,如果空格是可选的,您可以使用
量词,如下所示

Regex pattern = new Regex(@"^[ABCEGHJKLMNPRSTVXY][0-9]\s?[ABCEGHJKLMNPRSTVWXYZ[0-9]\s?[ABCEGHJKLMNPRSTVWXYZ][0-9]$");

根据其他答案……

  • 使用
    \s
    代替
    /s
  • 您不需要将
    [\s]
    放在方括号中,因为它已经暗示了一个完整的字符类。
还有…

  • 在大多数语言中,您可能不希望使用双引号
    “…”
    作为正则表达式的分隔符,因为这可能是在应用模式之前插入
    \s
    。这当然值得一试
  • 使用尾随量词
    \s*
    \s?
    允许空格为可选空格
您正在搜索\s吗?您的意思是
^[ABCEGHJKLMNPRSTVXY][0-9]\s[ABCEGHJKLMNPRSTVWXYZ][0-9]\s[ABCEGHJKLMNPRSTVWXYZ][0-9]$
一个反斜杠产生错误,两个错误不起作用,一个正斜杠也不起作用。有没有更有效的方法来实现这个正则表达式?比如简化表达式?一个斜杠给了我一个错误(无法识别的转义字符),所以我尝试了两个[\\s],但都不起作用。我已经更新了上面的答案,但KcDoD在下面也很正确,因为使用@将声明一个字符串文字,并允许您避免提供转义序列。此外,上面的图像表示上面正则表达式的视觉分解,以验证这是您正在寻找的。此外,如果您正在寻找0-1对1,您可以使用\s?(0-1)vs\s(正好是1)以限制空间使用。否则,如果你使用文字,一切都应该解决,因为C#不需要转义。太好了!我想把regexper.com和rubular.com作为将来测试正则表达式的绝佳资源。我已经用它们学习了一些正则表达式。\s抛出了一个无法识别的转义字符如果他想“允许”,而不是“要求”,这个空格,我想他可能想添加
@emodernoket-谢谢。。更新:)