Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

C# 仅适用于数字的正则表达式

C# 仅适用于数字的正则表达式,c#,regex,C#,Regex,我根本没有使用过正则表达式,所以我很难排除故障。我希望正则表达式仅在包含的字符串为所有数字时匹配;但在下面的两个示例中,它匹配的字符串包含所有数字加上等号,如“1234=4321”。我确信有一种方法可以改变这种行为,但正如我所说的,我从来没有对正则表达式做过太多的工作 string compare = "1234=4321"; Regex regex = new Regex(@"[\d]"); if (regex.IsMatch(compare)) { //true } regex

我根本没有使用过正则表达式,所以我很难排除故障。我希望正则表达式仅在包含的字符串为所有数字时匹配;但在下面的两个示例中,它匹配的字符串包含所有数字加上等号,如“1234=4321”。我确信有一种方法可以改变这种行为,但正如我所说的,我从来没有对正则表达式做过太多的工作

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

如果有关系,我将使用C#和.NET2.0。

使用开头和结尾锚定

Regex regex = new Regex(@"^\d$");
 Regex regex = new Regex(@"^\d$");
如果需要匹配多个数字,请使用
“^\d+$”


请注意,
“\d”
将匹配
[0-9]
和其他数字字符,如东部阿拉伯数字
。使用
“^[0-9]+$”
将匹配仅限于阿拉伯数字0-9



如果您需要包含除数字以外的任何数字表示形式(如十进制值),请参见。

它是匹配的,因为它查找的是“匹配”,而不是完整字符串的匹配。您可以通过更改regexp以专门查找字符串的开头和结尾来解决此问题

^\d+$

您的正则表达式将匹配任何包含数字的内容,您希望使用锚来匹配整个字符串,然后匹配一个或多个数字:

regex = new Regex("^[0-9]+$");

^
将锚定字符串的开头,
$
将锚定字符串的结尾,
+
将匹配其前面的一个或多个内容(本例中为数字)。

^\d+$,即“字符串的开头”、“1个或多个数字”、“字符串的结尾”英语。

如果您只想从字符串中提取数字,则模式“\d+”应该会有所帮助。

如果您需要容忍小数点和千位标记

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

如果数字可能为负数,则需要一个“-”。

另一种方法:如果您希望匹配国际数字,如波斯语或阿拉伯语,则可以使用以下表达式:

Regex = new Regex(@"^[\p{N}]+$");
要匹配文字句点字符,请使用:

Regex = new Regex(@"^[\p{N}\.]+$");

也许我的方法会对你有所帮助

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }

这适用于整数和十进制数。如果数字有分隔符,则不匹配

"^-?\\d*(\\.\\d+)?$"
与此匹配的某些字符串:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32
某些字符串不能:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.
对不起,格式很难看。 对于任意位数:

[0-9]*
对于一个或多个数字:

[0-9]+

如果需要检查所有数字是否为数字(0-9)

1425对

0142对

0对

1正确

154a25错误


1234=3254 FALSE

Regex Regex=new Regex(“^[0-9]{1,4}=[0-9]{1,4]$”)

以下是我的工作示例:

^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$
还有一些测试

阳性试验:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
阴性试验:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

不仅针对C#进行检查,还针对整数和浮点数使用Java、Javascript和PHP

Regex进行检查:

^[+-]?\d*\.\d+$|^[+-]?\d+(\.\d*)?$
数字可以以句点开头(无前导数字), 一个数字可以以句号结尾(没有尾随数字)。 上面的正则表达式将两者识别为正确的数字

A.(句点)本身没有任何数字是不正确的数字。 这就是为什么我们需要两个regex部分(用“|”分隔)


希望这有帮助。

使用开头和结尾锚定

Regex regex = new Regex(@"^\d$");
 Regex regex = new Regex(@"^\d$");

如果需要匹配多个数字,请使用
“^\d+$”

我认为这是最简单的一种,它接受欧洲和美国的数字书写方式,例如USA 10555.12 European 10.555,12 此外,此选项不允许多个逗号或点依次出现,例如10..22或10..22 除此之外,如.55或,55将通过。这可能很方便

^([,|.]?[0-9])+$

虽然上述解决方案中没有一个符合我的目的,但这对我来说是可行的

var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;
有效值示例:

"3",
"-3",
"0",
"0.0",
"1.0",
"0.7",
"690.7",
"0.0001",
"-555",
"945465464654"
"a",
"",
" ",
".",
"-",
"001",
"00.2",
"000.5",
".3",
"3.",
" -1",
"--1",
"-.1",
"-0",
"00099",
"099"
无效值的示例:

"3",
"-3",
"0",
"0.0",
"1.0",
"0.7",
"690.7",
"0.0001",
"-555",
"945465464654"
"a",
"",
" ",
".",
"-",
"001",
"00.2",
"000.5",
".3",
"3.",
" -1",
"--1",
"-.1",
"-0",
"00099",
"099"

以下正则表达式只接受英语和阿拉伯语(波斯语)语言中的数字(也是浮点)(就像Windows计算器一样):

上面的正则表达式接受以下模式:
11
1.2
0.3
۱۲
۱.۳
۰.۲
۲.۷
上面的正则表达式不接受以下模式:
3.
.3
0..3

.۱۲

您需要匹配数字或数字吗?例如:123.456是一个数字,但它不是所有数字。确切地说,OP对于使用整数或不使用整数并不完全清楚。为什么不在这种简单情况下对字符串进行TryParse处理?bool decimal.TryParse(字符串字符串,输出小数结果)或bool int.TryParse(字符串,输出整数结果)查看正则表达式解析数字的最终方法。在我看来,一般来说,排除正则表达式故障的最简单方法是使用命令行解释器,如果您的语言允许的话(似乎大多数情况下是这样的)。由于此示例在C#中,您可以使用,也可以使用调试器中的断点,然后使用VS中的即时窗口作为CLI。@Florin Ghita。谢谢。“-”需要在开头。此正则表达式还错误地允许前导负号(
-
)和句点(
)多次出现。您可以通过
-
设置为可选的
-?\d+(?:\。\d+)
将匹配整数或小数。(为了清晰起见,参数中的
?:
仅将参数设置为非捕获组并仅用于分组。)对于1.5这样的边缘情况,它失败了,但如果您对此进行监督的话。对于-2这样的基本情况,它仍然失败。请将其更改为
^-?[0-9][0-9,\.]*$
,以避免基本情况失败。+替换为*我这里缺少的一个场景是工程符号(1.2345e-4)对此有什么建议吗?请记住,对于属于该类别的任何字符,它都会返回
true
。这可能不是OP想要的。另请参见。请参见。您能解释一下您的答案吗?您会注意到,此问题的其他答案对正则表达式的每个部分都有一定程度的解释,即“3”和“3”实际上是很好的数字(分别表示0.3和3.0)。我们在源代码系统中经常看到这一点,而且大多数都是对数字(x