求可提取数字小数点后无意义末尾0的正则表达式
解决方案:提取小数点后无意义的末尾0
正确正则表达式组合
可以用两个正则分别对应两种场景,也可合并为一个统一表达式:
(\.(0+)$)|(?<=\.\d*[1-9])0+$
正则拆解说明
\.(0+)$:专门匹配小数点后全为0的结尾部分,对应1.000、0.000这类场景,会提取出.000这类完整的小数部分(?<=\.\d*[1-9])0+$:通过正向预查(?<=\.\d*[1-9])确保匹配位置在小数点后且存在至少一个非0数字,随后匹配末尾所有连续的0,对应0.0080这类场景,提取出末尾的0
示例验证
- 输入
1.000→ 匹配\.(0+)$,提取结果:.000 - 输入
0.000→ 匹配\.(0+)$,提取结果:.000 - 输入
0.0080→ 匹配(?<=\.\d*[1-9])0+$,提取结果:0 - 输入
10/100→ 无匹配结果,提取空内容,符合要求
原正则问题说明
你之前使用的(\.*?)(0+)$存在的问题是:\.*?会匹配空字符串,导致整数末尾的0被0+$匹配到,误提取了整数中具有实际意义的末尾0。
内容的提问来源于stack exchange,提问作者Bhavya Gandhi
相关产品推荐
相关产品推荐

