Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Regex VBA和x2B;正则表达式:数字测试_Regex_Vba - Fatal编程技术网

Regex VBA和x2B;正则表达式:数字测试

Regex VBA和x2B;正则表达式:数字测试,regex,vba,Regex,Vba,下面是一个匹配所有数字的正则表达式(如23.4;24;.123) 下面是我用来测试数字的代码(我用点代替逗号) 此测试为我提供了所有预期数字值的“True”。但我还想测试表达式中的值,如:“233456”或“23-34-56” 在这些情况下,测试返回“True”,我希望它返回false。我只是不知道应该使用什么表达式,也不知道如何更改代码以在这种情况下返回“False”。请尝试此方法 (?!\d*[ -]\d)[^\d][+-]?\d*([.,]\d*)?(?<!-)(?!\d*[ -]\

下面是一个匹配所有数字的正则表达式(如23.4;24;.123)

下面是我用来测试数字的代码(我用点代替逗号)

此测试为我提供了所有预期数字值的“True”。但我还想测试表达式中的值,如:“233456”或“23-34-56”

在这些情况下,测试返回“True”,我希望它返回false。我只是不知道应该使用什么表达式,也不知道如何更改代码以在这种情况下返回“False”。

请尝试此方法

(?!\d*[ -]\d)[^\d][+-]?\d*([.,]\d*)?(?<!-)(?!\d*[ -]\d)
(?!\d*[-]\d)[^\d][+-]?\d*([,]\d*)?(?)?

你想允许什么?你想禁止什么?为什么不直接使用
decimal.TryParse
?就像这样:你需要在
[\,]中逃逸这个句点。
@CaffGeek-OP正在使用VBA,而不是.NET语言你想让你的测试应用于整个字符串吗?事实上,像“24ABC”和“2412.3424”这样的东西将返回true。如果您想更改它,以便只有当整个字符串与模式匹配时测试才会返回true,您可以将开始锚“^”和结束锚“$”添加到您的模式中,如下所示:“^-?([0-9]+[\,.][0-9][\,.][0-9]+.[;([0-9]+)$”。如果这解决了您的问题,请告诉我,我可以将其作为答案发布。
regex.Pattern = decimalPattern
   If (regex.test(dmsExpression) = True) Then
       coord = Val(Replace(dmsExpression, ",", "."))
       convertDMSToDecimal = coord
       Exit Function
(?!\d*[ -]\d)[^\d][+-]?\d*([.,]\d*)?(?<!-)(?!\d*[ -]\d)