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

时间:2014-03-20 07:54:36

标签: regex c#-4.0 linqpad

我正在使用此正则表达式来匹配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());

无论 - / +和。符号应匹配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();

2 个答案:

答案 0 :(得分:3)

改变正则表达式:

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

转义版本:

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

说明

它将找到一个8位数字 或者,它将找到9个时段或数字的实例...仅在有1个句点分隔数字时。 9是为了解释这段时间。

在线演示

http://regex101.com/r/kD1oT6

答案 1 :(得分:1)

试试这个正则表达式:

^[+-]?(?:(?=\d+\.\d+$)[\d.]{3,9}|(?=\d+$)\d{1,8})$

基本上它有两个正则表达式被OR在一起。第一个是检查图案线xx.xx,表示点两侧的数字。这意味着它可以有至少3到9的长度。

第二个是尝试匹配格式中的数字xxxx。这意味着它可以有1到8个长度。

您可以从this link获得有关此正则表达式的更多解释。