Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';什么是最短的正则表达式,可以匹配任意小数位数的非零浮点数?_C#_Regex_Numbers_Match - Fatal编程技术网

C# 什么';什么是最短的正则表达式,可以匹配任意小数位数的非零浮点数?

C# 什么';什么是最短的正则表达式,可以匹配任意小数位数的非零浮点数?,c#,regex,numbers,match,C#,Regex,Numbers,Match,什么是最短的正则表达式,可以匹配任意小数位数的非零浮点数 它应该接受这样的数字 -1 -5.9652 -7.00002 -0.8 -0.0500 -0.58000 0.01 0.000005 0.9900 5 7.5 7.005 但拒绝使用诸如 . .02 -. -.996 0 -0 0. -0. -0.000 0.00 -- .. + +0 +1 +. +1.26 ,etc 我不需要对带有e、e之类的科学符号的支持。 顺便说一下,我使用的语言是C#。这是我经常使用的语言: (\+\-)?(

什么是最短的正则表达式,可以匹配任意小数位数的非零浮点数

它应该接受这样的数字

-1
-5.9652
-7.00002
-0.8
-0.0500
-0.58000
0.01
0.000005
0.9900
5
7.5
7.005
但拒绝使用诸如

.
.02
-.
-.996
0
-0
0.
-0.
-0.000
0.00
--
..
+
+0
+1
+.
+1.26
,etc
我不需要对带有e、e之类的科学符号的支持。

顺便说一下,我使用的语言是C#。

这是我经常使用的语言:

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

在PHP示例中使用:

<?php

$s= '1.234e4';

preg_match('~(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?~', $s, $m);
print_r($m);

?>

编辑更新以反映新需求(最后一位小数可以是零)

(比使用前看短:
^-?(0\.(?=[1-9])\d*.[1-9]\d*(\.\d+))$


EDIT2如果例如
001.000
可以通过

^-?(?=.*[1-9])\d+(\.\d+)?$
注意:如果您的regexp匹配器没有完成^$,请记住放置它


请问为什么是“最短的”?预编译器RegExp或与非匹配组相同的版本可能更快。对零的测试也可能更快。

你可能会考虑。

啊,我闻到一个“我的正则表达式比你的短”的竞赛。极客们争夺的东西……:)<代码>0.0将位于哪一侧?接受还是拒绝?您忘记在测试用例中包含
0.000
,大多数早期答案都接受,但在我的书中仍然是零。:)001.000怎么样?接受,对吗?如果解决方案足够短,我愿意通过
001.000
,但不幸的是,我不熟悉C#中的正则表达式细节。不过,幸运的是,您的语法是正确的。作为补充,我会选择
^-?(0\.\d*[1-9]\d*.[1-9]\d*.[1-9]\d*(\.\d+))$
,以保持能够在(-1,1)范围内的数字之后输入最终零的一致性,而不仅仅是在以正数开头的数字之后。几乎:拒绝0.10。在第一个
[1-9]
之后添加另一个
\d*
。是的,我不太确定是否应该拒绝例如
0.10
。我现在明白了,我没有那么一致:)@Luviere我想我的l33t regex0rz技能现在已经非常精疲力竭:)26个字符似乎是我最好的选择。我想要最短的字符,因为它会在XAML文件中的某个地方出现,我希望它尽可能简短。5-15个字节的差异足以忽略性能和清晰度?字符在一个regexp中,一旦编译好就没有多大关系了。RegExp计算器是一个有限状态机。有很多方法可以改进FSM图,这也是一些编译器所做的。简而言之,RegExp字符串长度与其计算速度之间没有直接关系。我关心的不是速度,而是视觉紧凑性。我不想在XAML中使用大正则表达式,这很难理解。这与我的5.02相匹配(虽然没有在C#中测试),缺乏
(?!)
支持可能是你的问题?
应该被转义。(当您担心代码大小而不是其他事情时,很容易出现这种错误…:P)
^-?(0\.\d*[1-9]|[1-9]\d*(\.\d+)?)$
^-?(0\.\d*[1-9]\d*|[1-9]\d*(\.\d+)?)$
^-?(?=.*[1-9])\d+(\.\d+)?$
-?(?!0)\d+(\.\d+)?