一个关于货币匹配的正则表达式
在搜狗笔试中遇到一个题,说让用正则表达式匹配货币,货币的格式如下:
1,234,234.56 小数点保留两位。
当时写的不太正确,现在好好思考了一下,需要注意的地方有两点:
- 排除非货币的情况,也就是说货币的首位不为0,也就是不能匹配02,234.56
- 如果是0.56的情况也要匹配到.
现将自己的 正则表达式写出来,如果网友有什么好的正则表达式,一定要告诉我。
1 ^([1-9][0-9]{0,2}(,[0-9]{3})*|0)\.[0-9]{2}
思路如下,分成两种情况,一种是2,456,345.56,另一种是0.56的情况。
第一种情况:首位不为0,所以首先是[1-9],但是第一部分最高可能有3位,最低1位,所以也就是[1-9][0-9]{0,2},然后将,456看成一个模式,所以子模式是(,[0-9]{3}),可能有多个子模式,所以有(,[0-9]{3})*,所以第一种情况也就是[1-9][0-9]{0,2}(,[0-9]{3})*
第二种情况:也就是个位数为0,只有小数的情况,此时应该匹配0
所以加上小数的匹配部分也就是上面的结果
浙公网安备 33010602011771号