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