代码之家  ›  专栏  ›  技术社区  ›  Gad

使用C#的正则表达式匹配(简单??)正则表达式

  •  2
  • Gad  · 技术社区  · 17 年前

    好的,很抱歉,这可能看起来像是一个愚蠢的问题,但我无法解决这个问题:

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

    我尝试了很多方法,但就是找不到合适的正则表达式!

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

    即使不允许使用e,也将返回true。.. 我尝试过很多字符串,包括正则表达式(“[1234567890 dD+]+”)。..

    它总是有效的 Regex Pal 但不是C#。..

    请提出建议,我再次道歉,这似乎是一个非常愚蠢的问题

    6 回复  |  直到 17 年前
        1
  •  8
  •   Nimantha Thatkookooguy    6 年前

    试试这个:

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

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

    @评论:谢谢,我修好了丢失的 + 和空间。

        2
  •  2
  •   Coincoin    17 年前

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

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

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

        3
  •  1
  •   Marc Gravell    17 年前

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

        Regex re = new Regex(@"^[\d dD+]+$");
        Console.WriteLine(re.IsMatch("e4"));
        Console.WriteLine(re.IsMatch("4"));
    
        4
  •  1
  •   Simon Lehmann Simon Lehmann    17 年前

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

    为了使你的例子奏效,你必须写如下:

    Regex oReg = new Regex(@"^[\d dD+]+$");
    oReg.IsMatch("e4");
    
        5
  •  0
  •   Ian Jacobs    17 年前

    我相信它正在返回True,因为它正在寻找4。正则表达式中没有任何内容将字母e排除在结果之外。

        6
  •  -1
  •   Joel Coehoorn    17 年前

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

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