好的抱歉这可能看起来像一个愚蠢的问题,但我无法弄清楚这件事:
我正在尝试解析一个字符串,只是想检查它是否只包含以下字符:'0123456789dD +'
我尝试过很多东西,但是无法弄清楚要使用正确的正则表达式!
Regex oReg = new Regex(@"[\d dD+]+");
oReg.IsMatch("e4");
即使不允许e,也会返回true 我尝试过很多字符串,包括Regex(“[1234567890 dD +] +”)......
它始终适用于Regex Pal但不适用于C#...
请建议并再次道歉这似乎是一个非常愚蠢的问题
答案 0 :(得分:8)
试试这个:
@“^ [0-9dD +] + $”
开头和结尾的^和$分别表示输入字符串的开头和结尾。因此,在开始和结束之间仅允许所述字符。在您的示例中,如果字符串包含其中一个字符,则正则表达式匹配,即使它也包含其他字符。
@comments:谢谢。我修复了缺失的+和空格。
答案 1 :(得分:2)
Regex oReg = new Regex(@"^[0-9dD +]+$");
oReg.IsMatch("e4");
^匹配文本流的开头,$匹配结束。
答案 2 :(得分:1)
匹配4;如果你想要整个字符串完全匹配,你需要^和$来终止正则表达式 - 即
Regex re = new Regex(@"^[\d dD+]+$");
Console.WriteLine(re.IsMatch("e4"));
Console.WriteLine(re.IsMatch("4"));
答案 3 :(得分:1)
这是因为正则表达式也可以匹配部分输入,在这种情况下它只匹配“e4”的“4”。如果你想匹配整行,你必须用“^”(匹配行开头)和“$”(匹配行结束)包围正则表达式。
因此,为了使您的示例有效,您必须编写如下:
Regex oReg = new Regex(@"^[\d dD+]+$");
oReg.IsMatch("e4");
答案 4 :(得分:0)
我相信它会返回True,因为它找到了4.正则表达式中没有任何内容排除了结果中的字母e。
答案 5 :(得分:-1)
另一个选择是反转所有内容,因此它匹配您不想允许的字符:
Regex oReg = new Regex(@"[^0-9dD+]");
!oReg.IsMatch("e4");