正则表达式匹配时在小数点处截断字符串,如何获取完整结果?
解决正则匹配带小数点数值的问题
嘿,我来帮你搞定这个正则匹配的小问题~
你遇到的核心问题是原正则里的\w不包含小数点:原正则\s?(\w+)=(\w+)?\s?中的\w只能匹配字母、数字和下划线,而小数点.不在它的匹配范围内,所以当匹配到57.800里的.时,匹配就直接停在57,后面的.800就被漏掉了。
调整方案
根据你的需求,有两种常用的调整方式:
1. 简单适配带小数点的数值(适合确定输入格式规范的场景)
把第二个捕获组的\w+替换成[\d.]+,调整后的正则为:
\s?(\w+)=([\d.]+)\s?
这个正则里的[\d.]表示匹配数字(0-9)和小数点,+表示至少出现一次,这样就能完整捕获57.800这类带小数点的数值。
2. 更严谨的小数格式匹配(避免不规范的数值)
如果需要确保匹配的是合法的小数(比如不能有多个小数点、不能只有小数点),可以用更精准的正则:
\s?(\w+)=(\d+(\.\d+)?)\s?
\d+:匹配至少一位整数部分(\.\d+)?:可选的小数部分(小数点+至少一位数字),?表示这部分可以不存在(也就是支持整数)
用这个正则测试你的输入Brutto=57.800,同样能完整匹配到Brutto=57.800,还能兼容Brutto=123这类整数场景。
测试验证
把调整后的正则应用到你的输入Brutto=57.800,就能得到你想要的完整匹配结果啦~
内容的提问来源于stack exchange,提问作者Thomas Geulen
相关产品推荐
相关产品推荐

