有人能告诉我为什么这个正则表达式不起作用?

时间:2011-09-20 19:48:56

标签: c# .net regex

我正在使用此正则表达式来验证文本框中的科学记数法,但它不起作用。这不允许输入任何内容。

regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?");

提前致谢。

4 个答案:

答案 0 :(得分:2)

问题是你的正则表达式匹配空字符串。一个简单的解决方案可能是在前面添加^,在末尾添加$,以要求整个输入字符串与正则表达式匹配。

这是一个小测试:

var numbers = new[] {
  "0", "1", "01", "+1", "-1", "+0", "-0", "1.9", "1.09", "1.90", "1e0", "1e01", "1e10"
};
var regex = new Regex("^[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?$");
var valid = numbers
  .Select(n => regex.Match(n))
  .Where(m => m.Success)
  .Select(m => m.Value);

打印valid中的元素将导致以下结果:

0
1
+1
-1
+0
-0
1.9
1.09
1e0
1e10

请注意011.901e01的匹配程度,但我认为这是故意的。

答案 1 :(得分:0)

你确定这是你真正要做的吗?

以下是RegexBuddy的屏幕截图:

Regex Explained

答案 2 :(得分:0)

这是我觉得非常有用的另一个测试人员:http://gskinner.com/RegExr/ 如果您只是想在捕获指数时匹配包含科学记数法的浮点数,那么试试这个:[ - +]?[0-9] *。?[0-9] +([eE] [ - +] [0-9] +)? (来自http://www.regular-expressions.info/floatingpoint.html

答案 3 :(得分:0)

[-+]?(0|[1-9])[0-9]*([.][0-9]*)?([eE][-+]?(0|[1-9])[0-9]*)?

有点接近你想要的......但是如果你给出了一组你希望通过/失败的测试表,那也许会有所帮助