【问题标题】:Matching an (easy??) regular expression using C#'s regex使用 C# 的正则表达式匹配(简单??)正则表达式
【发布时间】:2010-09-16 12:08:46
【问题描述】:

好的,抱歉,这似乎是一个愚蠢的问题,但我无法弄清楚:

我正在尝试解析一个字符串,只是想检查它是否只包含以下字符:'0123456789dD+'

我尝试了很多东西,但无法找出正确的正则表达式来使用!


  Regex oReg = new Regex(@"[\d dD+]+");
  oReg.IsMatch("e4");

即使 e 不被允许也会返回 true... 我试过很多字符串,包括 Regex("[1234567890 dD+]+")...

它始终适用于 Regex Pal,但不适用于 C#...

请指教,我再次道歉,这似乎是一个非常愚蠢的问题

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    试试这个:

    @"^[0-9dD+ ]+$"
    

    开头和结尾的^$ 分别表示输入字符串的开头和结尾。因此,在开头和结尾之间,只允许指定的字符。在您的示例中,如果字符串包含其中一个字符,即使它还包含其他字符,正则表达式也会匹配。

    @cmets:谢谢,我修复了缺失的+ 和空格。

    【讨论】:

    • 我认为您的示例在 $ 之前需要另一个 + 或 *,它目前只匹配单个字符
    【解决方案2】:

    哎呀,你忘了界限,试试吧:

    Regex oReg = new Regex(@"^[0-9dD +]+$");
    oReg.IsMatch("e4");
    

    ^ 匹配文本流的开头,$ 匹配结尾。

    【讨论】:

    • 原始模式允许空间
    【解决方案3】:

    它与 4 匹配;如果您想要对整个字符串进行完全匹配,则需要 ^ 和 $ 来终止正则表达式 - 即

        Regex re = new Regex(@"^[\d dD+]+$");
        Console.WriteLine(re.IsMatch("e4"));
        Console.WriteLine(re.IsMatch("4"));
    

    【讨论】:

      【解决方案4】:

      这是因为正则表达式也可以匹配输入的一部分,在这种情况下它只匹配“e4”的“4”。如果你想匹配整行,你必须用“^”(匹配行开始)和“$”(匹配行结束)包围正则表达式。

      所以要让你的例子工作,你必须写如下:

      Regex oReg = new Regex(@"^[\d dD+]+$");
      oReg.IsMatch("e4");
      

      【讨论】:

        【解决方案5】:

        我相信它会返回 True,因为它找到了 4。正则表达式中的任何内容都不会从结果中排除字母 e。

        【讨论】:

          【解决方案6】:

          另一种选择是反转所有内容,以便匹配您不想允许的字符:

          Regex oReg = new Regex(@"[^0-9dD+]");
          !oReg.IsMatch("e4");
          

          【讨论】: