VB环境下带负号的十进制数正则表达式问题求助
正则表达式修正方案及问题解析
你的正则核心问题是没覆盖带负号的小数场景,当前分支只处理了负号整数、无整数部分的小数、0开头的小数、正整数开头的小数,但完全漏掉了
-开头且带小数部分的情况(比如-1,、-1,1)。修正后的正则(兼容VB环境):
^-?[1-9]\d*$|^-?0,\d*$|^-?[1-9]\d*,\d*$|^,\d+$|^0$嫌分支多可以合并成更简洁的写法:
^-?(?:[1-9]\d*|0)?(?:,\d*)?$(
?:是非捕获组,VB正则支持这个语法,不会额外生成无用的捕获组)各部分作用说明:
^-?:匹配开头可选的负号(?:[1-9]\d*|0)?:匹配可选的整数部分——要么是非零开头的整数(避免前导0),要么是单独的0,也可以完全没有整数部分(对应,5这种格式)(?:,\d*)?$:匹配可选的小数部分——逗号开头,后面可以跟任意数量数字,也可以只留逗号(对应-1,这种格式)
验证下来能匹配你需要的所有格式:
-12、0、1、-1,、-1,1,同时也能匹配,5、0,3这类合法格式。
内容的提问来源于stack exchange,提问作者Raziel
相关产品推荐
相关产品推荐

