固定长度浮点数的正则表达式

PSR*_*PSR 4 regex linqpad c#-4.0

我正在使用这个正则表达式来匹配 8 位有符号浮点数。

  string exp= "12345678";
  string regEx1="^([-+]?[(\\d+\\.?(\\d+)?)]{1,8})($)";
  Regex topRowRegx = new Regex(regEx1, RegexOptions.IgnoreCase | RegexOptions.Multiline);
  Match matchResult = topRowRegx.Match(exp.Trim());
Run Code Online (Sandbox Code Playgroud)

不管 -/+ 和 . 符号它应该匹配 1 到 8 位数字。

它应该匹配-1.2345678, 123.45678, +12.34, 1.2, 1, 12345678, 1254。如果有十进制符号,小数点前和小数点后至少应有一位。

上面的表达式工作正常,但是当我使用 -/+ 或 . 带有 8 位数字。你能帮我如何准确识别 8 位数字并留下剩余的符号数吗?

更新: Vasili Syrakis 的回答解决了上述问题。只是出于好奇,为什么这没有给出正确的结果?

   string exp = "text> -9.9999999 \"some text here\"";
   var resultNumber = Regex.Match(exp, "[-+]?(\\d{1,8}|(?=\\d\\d*\\.\\d+?$)[\\d\\.]{1,9})");
   ("Result:"+resultNumber.ToString()).Dump();
Run Code Online (Sandbox Code Playgroud)

Vas*_*kis 5

改变的正则表达式:

^[-+]?(\d{1,8}|(?=\d\d*\.\d+?$)[\d\.]{1,9})$
Run Code Online (Sandbox Code Playgroud)

转义版本:

^[-+]?(\\d{1,8}|(?=\\d\\d*\\.\\d+?$)[\\d\\.]{1,9})$
Run Code Online (Sandbox Code Playgroud)

解释

它要么找到一个 8 位数字
,要么找到一个句点或数字的 9 个实例......仅当有 1 个句点分隔数字时。9是会计期间。

在线演示

http://regex101.com/r/kD1oT6